2012-10-13 11 views
5

Pracuję z danymi podstawowymi i próbuję uzyskać wyświetlanie danych za pomocą prostego modelu danych. Awarii aplikacji i daje mi ten komunikat o błędzieDawanie błędnych danych podstawowych

kończące aplikację spowodowane nieprzechwyconego wyjątku „NSInvalidArgumentException”, powód: „+ entityForName: zero nie jest prawnym parametr NSManagedObjectContext szukając nazwy podmiotu Przypomnij '”

Nie jestem całkowicie pewien, ale jak to przyjmę, to jest to, że nie może znaleźć mojej istoty zwanej Przypominać? Jednak w rzeczywistości mam podmiot o nazwie Przypomnienie.

ja również umieścić punkty przerwania i zatrzymuje się tutaj: enter image description here

Każda pomoc będzie mile widziana. Całkowicie w ślepym zaułku.

kodu zarządzanego Kontekst w App Delegata .M

enter image description here

+0

Kontekst obiektu zarządzanego jest zerowy. Zakładam, że to jest ivar ... To nic nie zostało ustawione. –

+0

Dzięki za odpowiedź. Czy możesz mi powiedzieć, jak mogę rozwiązać ten problem? – Zack

+0

Niestety nie, bo inaczej znalazłbym odpowiedź. Musisz dodać więcej kodu, tutaj nie ma wystarczającej ilości informacji. Gdzie w kontrolce widoku ustawiasz ivar managedObjectContext? –

Odpowiedz

1

Problem polega na tym, że accessor a Ivar mieć taką samą nazwę. Stąd bierze się podbarwna konwencja ivar. Tutaj nie używasz akcesora, aby uzyskać dostęp do twojej nieruchomości, bezpośrednio używasz zmiennej bazowej, więc nigdy się nie inicjalizuje. Zamiast tego upewnij się, że zawsze przechodzisz przez swoje metody dostępu i nie będziesz miał problemu. Więc przepisać sposób naruszające zasady (i żadnych innych, które używają właściwość managedContextObject coś jak poniżej:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; // it's good practice to call the super methods, even if you're fairly certain they do nothing 

    // Get a reference to the managed object context *through* the accessor 
    NSManagedObjectContext* context = [self managedObjectContext]; 

    // From now on, we only use this reference in this method 
    NSFetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"Remind" inManagedObjectContext:context]; // <- use the local reference we got through the accessor 
    [request setEntity:entity]; 
    NSError* error = nil; 
    NSArray* array = [context executeFetchRequest:request error:&error]; 
    if(!array) { 
    // Do something with the error 
    NSLog(@"Error Fetching: %@", error); 
    } 
    [self setDesitnationsArray:[array mutableCopy]]; 
    [destinationsTableView reloadData]; 
} 

Możesz chcieć zmienić swoje Ivars do czegoś, czego nie będzie skłonny do używania lub że będzie natychmiast oczywiste, że nie przeszedłeś przez accessory, jak _managedObjectContext lub nawet _privateContext lub cokolwiek będzie trzymać się ciebie, dopóki nie przyzwyczaisz się do uzyskania dostępu do właściwości przez akcesorów. Jeśli nie podoba ci się składnia celu C w celu uzyskania dostępu do właściwości, może użyć składni kropkowej, ale musisz zawsze pamiętać, aby przejść przez self, na przykład, self.managedObjectContext. Nie podoba mi się ta metoda, ponieważ ludzie zapominają, że nie jest to bezpośredni dostęp do właściwości i używa akcesorów, więc uważają, że w porządku jest zamienienie składni kropkowej na bezpośredni dostęp, kiedy nie jest (jak w twoim przypadku).

+0

Dziękuję za odpowiedź. Jednak zmieniłem powyższy kod na poniższy, tak jak ty i nadal daje mi ten sam błąd, niestety. – Zack

+0

@zack, otrzymasz od delegata aplikacji. Problem polega na tym, że twój ivar jest zerowy i to jest błąd. W tej metodzie faktycznie nie ma odniesienia do kontekstu obiektu zarządzanego. –

+0

@JasonCoco Mam ten sam problem. w moim przypadku kontekst jest zerowy. Czy możesz dać mi znać, jak uzyskać to od Delegata aplikacji? –

Powiązane problemy