Wie der Core-Daten ist ManagedObjectModel innen einen Rahmen?

Ich versuche zu migrieren, die einen bestimmten Teil einer meiner apps in einen Rahmen, so dass ich Sie in meiner app selbst und in einer dieser schicken neuen iOS-8-widgets. Dieser Teil ist behandelt, alle meine Daten in Core Data. Es ist ziemlich straight forward, alles über und um auf Sie zuzugreifen. Ich habe gerade Probleme beim Zugriff auf meine momd Datei vorhanden.

Beim erstellen der NSManagedObjectModel ich immer noch versuchen, laden Sie die momd wie dargestellt in apples code-Vorlagen:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MyApp" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

Leider modelURL bleibt nil und damit MyApp Abstürze beim Zugriff auf die Core-Data-stack mit diesem Fehler:

2014-08-01 22:39:56.885 MyApp[81375:7417914] Cannot create an NSPersistentStoreCoordinator with a nil model
2014-08-01 22:39:56.903 MyApp[81375:7417914] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model'

So, was ist der richtige Weg, dies zu tun, wenn arbeiten im inneren eines Rahmens mit Core Data?

  • Ist die Datei selbst enthalten in dem target, das Sie erstellen? Sieht für mich aus wie die Datei, die Sie verweisen, ist nicht immer Hinzugefügt als Teil der Zielgruppe aufzubauen.
  • Meine MyApp.xcdatamodeld enthalten ist, in die Mitgliedschaften meiner framework-Ziel, ja. Für die momd Datei selbst habe ich keine Ahnung, ob ich das ändern kann überall. Ist das nicht eine erstellt während der Bau - /on-the-fly basierend auf meinen xcdatamodeld - Datei?
  • Ich habe noch nie enthalten eine Modell-Datei als Teil eines Rahmens. Wenn ich ein Modell Baue ich das Modell aus dem source-code. Aber ich glaube, Ihr problem ist, dass Sie suchen im main bundle. Haben Sie versucht, das Durchlaufen wird, werden alle bundles, versuchen, laden Sie das Modell aus, bis Sie Erfolg haben?, mit [NSBundle allBundles]?
  • Ja, das habe ich versucht. Das hat nicht funktioniert für mich. Ich iteriert über alle bundles versuchen Sie finden "alle" MyApp.momd. Das array, wo ich Sie gespeichert habe alle URLs, die war leer nach der Ausführung durch alle meine Bündel.
  • Das klingt nicht Recht. Es ist jedoch eine andere option, statt der Verpackung Ihrer eigentlichen Modell-Datei. Sobald Sie festgelegt sind auf Ihr Modell, laden, archivieren Sie es auf einer NSData Objekt, dann drehen, die in eine base64-codierte Zeichenfolge. Sie können schreiben, ein einfaches Programm, um es zu tun, oder melden Sie es an die Konsole und Ausschneiden/einfügen der Zeichenfolge. Sie können dann festlegen, dass eine variable zu sein, dass die base64-kodierten string. Wenn Ihr code ausgeführt wird, können Sie dann entschlüsseln Sie die Zeichenfolge in NSData und dann entpacken Sie es in ein NSManagedObjectModel Instanz. Ihr Modell ist nun Teil Ihrer kompilierten Bibliothek.
InformationsquelleAutor flohei | 2014-08-01
Schreibe einen Kommentar