2013-05-05 14 views
6

jestem coraz zerowy wynik dlaZakończenie aplikację spowodowane nieprzechwyconego wyjątku 'NSInvalidArgumentException', powód: „+ entityForName: zero nie jest NSManagedObjectContext prawny

AppDelegate.h

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

AppDelegate.m

@synthesize managedObjectContext = __managedObjectContext; 
    @synthesize managedObjectModel = __managedObjectModel; 
    @synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
      Person *newPerson = [NSEntityDescription 
      insertNewObjectForEntityForName:@"Person" 
      inManagedObjectContext:self.managedObjectContext]; 
      ....... 

    } 

Mam jeden plik xcdatamodeld z jednostką osoby i atrybutem nazwy. Zrobiłem plik Person.h i .m z obiektu NSManagedObject.

Dlaczego otrzymuję wynik zerowy dla mojego wyjścia.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Person'' 
+0

potwierdzić MOC. upewnij się, że kontekst nie jest zerowy. upewnij się, że MOM jest tym, czego oczekujesz! –

+0

'assert (self.managedObjectContext);' –

+1

'NSLog (@"% @ ", self.managedObjectModel.entitiesByName);' –

Odpowiedz

2

zdałem sobie sprawę, że od czasu, kiedy nie było dodawanie danych Core kiedy pierwotnie stworzony projekt, brakowało mi jakiś kod, który jest generowany automatycznie, gdy opcja Dane rdzeń jest zaznaczone. Tak więc, gdy śledziłem niektóre tutoriale online, zakłada się ten automatycznie generowany kod. Tam się spieprzyłem.

+2

Byłoby miło, gdybyś coś tu podzielił. – Harry

+0

Mam do czynienia z tym samym scenariuszem. Ręcznie dodałem kod, aby korzystać z podstawowych danych, a teraz mam taki sam problem jak Ty. Czy możesz podzielić się samouczkami, których przestrzegałeś? –

+0

Zobacz tutaj, jeśli przyszli ludzie mają problemy dotyczące tego: http://stackoverflow.com/questions/8076103/how-to-assign-a-managed-object-context-to-the-application-delegate-in-ios –

12

W pliku implementacji viewController.m, tuż pod ten bit kodu:

- (void)viewDidLoad 
{ 

dodać ten kawałek kodu:

id delegate = [[UIApplication sharedApplication] delegate]; 
    self.managedObjectContext = [delegate managedObjectContext]; 
0

Upewnij się, że kod, który działa, gdy wyjątek jest wywoływany jest uruchamiany w tym samym wątku, w którym utworzono kontekst obiektu zarządzanego.

0

Jeśli używasz szablonu projektu, który używa NSPersistentContainer, upewnij się, że uruchamiasz go na iOS 10+ lub nie powiedzie się po cichu z inicjalizacją i awarią, gdy wykonasz jakąś operację Core Data.

Powiązane problemy