2013-05-05 9 views
6

Ich bin fürBeenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: ‚+ entityForName: nil ist keine juristische NSManagedObjectContext

AppDelegate.h ein Null-Ergebnis zu erzielen

@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]; 
      ....... 

    } 

Ich habe eine xcdatamodeld-Datei mit einer Entität von Person und einem Attribut des Namens. Ich habe eine Person.h und eine .m-Datei von einem NSManagedObject erstellt.

Warum bekomme ich ein Null-Ergebnis für meine Ausgabe.

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

den MOC geltend machen. Stellen Sie sicher, dass der Kontext nicht null ist. Stellen Sie sicher, dass die MOM auch das ist, was Sie erwarten! –

+0

'Asser (self.managedObjectContext);' –

+1

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

Antwort

2

Ich erkannte, dass ich da nicht Kerndaten hinzugefügt wurde, als ich ursprünglich das Projekt erstellt, ich einige Code fehlte, die automatisch generiert wird, wenn die Option Kerndaten aktiviert ist. Wenn ich also einige Tutorials online befolge, wird dieser automatisch generierte Code angenommen. Dort habe ich versagt.

+2

Es wäre schön, wenn Sie hier etwas teilen .. – Harry

+0

Ich bin mit dem gleichen Szenario konfrontiert. Ich habe Code manuell hinzugefügt, um Core-Daten zu verwenden und habe jetzt das gleiche Problem wie Sie. Können Sie bitte die Tutorials teilen, denen Sie gefolgt sind? –

+0

schauen Sie hier, wenn zukünftige Leute Probleme darüber haben: http://StackOverflow.com/Questions/8076103/How-to-assign-a-Managed-Object-Context-to-the-Application-Delegate-In-ios –

12

In Ihrer viewController.m Implementierungsdatei direkt unter diesem Stück Code:

- (void)viewDidLoad 
{ 

dieses Stück Code hinzufügen:

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

Vergewissern Sie sich, dass der Code, der ausgeführt wird, wenn die Ausnahme Wird ausgelöst, wird auf demselben Thread ausgeführt, auf dem Sie den Kontext des verwalteten Objekts erstellt haben.

0

Wenn Sie eine Projektvorlage verwenden, die NSPersistentContainer verwendet, stellen Sie sicher, dass Sie diese unter iOS 10 oder höher ausführen. Bei der Initialisierung schlägt der Prozess fehl, wenn Sie einen Core Data-Vorgang ausführen.

Verwandte Themen