2012-09-27 26 views
6

kann kein NSPersistentStoreCoordinator mit einem Nullmodell erstellt werden. Ich erhalte einen Fehler 'Cannot create an NSPersistentStoreCoordinator with a nil model', nachdem ich meine Anwendung vom Gerät gelöscht habe. Ich teste eine iPhone App auf einem iPad-Gerät. Ich habe diesen Code setzen zu überprüfen, ob ich die Datei in AppDelegate.m haben:Nach dem Löschen der App vom Gerät

- (NSManagedObjectModel *)managedObjectModel { 
    if (__managedObjectModel != nil) { 
     return __managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Name" withExtension:@"momd"]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:[modelURL path]]) { 
     NSLog(@"%@", [modelURL path]); //This is printed because file exists 
    } 
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    return __managedObjectModel; 
} 

Das Problem ist, dass [NSManagedObjectModel initWithContentsOfURL] Nullwert zurückkehrt. Ich habe die folgenden Dinge, ohne Erfolg getan:

  1. ändern managedObjectModel Instanziierung mit diesem __managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
  2. Gereinigt Build-Ordner und Gereinigt Projekt
  3. erneut gestartet Xcode
  4. Neu-Start Computer
  5. Changed „momd "to" mom "
  6. .xcdatamodeld ist in Copy Bundle Ressourcen und kompilieren Quellen
  7. .xcdatamodeld Umbenannt und gereinigt und geschlossen Xcode Projekt mehrmals
  8. ausgeschaltet, und auf dem Gerät
  9. Gelöschte Ordner aus: $ cd /Users/john/Library/Developer/Xcode/DerivedData
  10. Changed SQLite Namen für zwingen Datenbank Generation
  11. Deleted (wieder) Anwendung von Devine

Ich habe die Lösung für Stunden gesucht, und ich kann es immer noch nicht finden.

+0

Ist es auf dem Simulator arbeiten? Können Sie die '.xcdatamodeld' Datei in Xcode öffnen? – FluffulousChimp

+0

Alan, ich kann die Datei '.xcdatamodeld' in Xcode öffnen, aber die Anwendung funktioniert nicht im Simulator. Es wird gestartet, zeigt jedoch nur einen schwarzen Bildschirm an. – amb

+0

Ich denke, ich habe etwas gefunden ... Ich habe gerade festgestellt, dass ich nicht alle Dateien gelöscht habe, die in '/ Users/john /Bibliothek/Developer/Xcode/DerivedData' leben, also war der Simulator OK sogar das managedObjectModel. Gibt es eine Möglichkeit, diese Dateien auf dem Gerät zu löschen? – amb

Antwort

15

schließlich nach zwei Tagen um dieses Problem zu lösen versuchen, habe ich hier die Lösung gefunden:

How to create the magic .xcdatamodeld folder/package?

Ich beende jetzt ein Projekt, die andere Entwickler begonnen, und es scheint, dass er didn Ich habe die letzten Änderungen nicht in den Repo verschoben, aber diese Änderungen waren in der App auf dem Gerät und als ich die App entfernte, löschte ich die richtige .xcdatamodeld Datei. Das Problem war, dass ich nur eine MyApp.xcdatamodel Datei in dem Projekt hatte, und das war der Grund, einen leeren Ordner momd zu haben, scheint es.

Um die richtige Hierarchie der Datenmodell, die Lösung war ganz einfach zu erstellen:

  1. Wählen Sie die MyApp.xcdatamodel
  2. Zum Editor> hinzufügen Modell Version ...

Und Dadurch wurde die Datei MyApp.xcdatamodel in MyApp.xcdatamodeld eingebettet. Jetzt hat der momd Ordner die mom Dateien und die App läuft OK. Das einzige Problem ist jetzt, dass ich zwei MyApp.xcdatamodel habe, eine mit einem grünen ausgewählten Symbol, aber beide mit dem gleichen Inhalt, also kein Problem.

1
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"select xcdatamodeld" withExtension:@"momd"]; 

genaue URL wählen für Ressourcennamen ..

0

es ist relativ einfach.

Wenn Sie eine xcdatamodel Datei haben ohne Versionen: Verwenden Sie die Erweiterung "Mama" in Ihrer managedObjectModel Deklaration. Wenn Ihr xcdatamodel Versionen hat, sollten Sie "momd" verwenden.

2

Ich unterstützte, um meine erste iOS App wieder zu bauen. Heute habe ich diesen Fehler erhalten: 'Ich kann keinen NSPersistentStoreCoordinator mit einem Nullmodell erstellen'. Eigentlich ist das einfach zu beheben. Bitte diese Codezeile machen:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[name]" withExtension:@"momd"]; 

Die [Name] Sie ausgefüllt als Modelldatei gleich ist (.xcdatamodeld). Zum Beispiel habe ich eine TipRecord.xcdatamodeld bekam dann sollte diese Zeile sein:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TipRecord" withExtension:@"momd"]; 
Verwandte Themen