Frage

Ich versuche, die Migrationsfunktion in Coredata zu verwenden. Ich habe die Apple-Dokumentation gefolgt. Ich habe ein Problem in der folgenden Methode:

/**
 Returns the managed object model for the application.
 If the model doesn't already exist, it is created by merging all of the models found in the application bundle.
 */
- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    /* 
     * NSInvalidArgumentException', reason: '*** -[NSCFArray insertObject:atIndex:]: attempt to insert nil'
     * 2010-02-17 16:27:15.338 Patrimoine[3037:207]
     */ 
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
    return managedObjectModel;
}

Es scheint, dass es das gleiche Problem auf http: / /iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html

Und doch habe ich die Methode wählen, Apfel vermuten lässt, indem die Menüoption „Add Modell Version“.

Haben Sie eine Idee?

War es hilfreich?

Lösung

Sie müssen Ihr Projekt reinigen. Sobald Sie „Version“ Ihr Modell Xcode es zu einem Bündel (Ordner) bewegen sich aber nicht die alten entfernen. Was dann passiert, ist, dass Sie das nächste Mal Ihre Anwendung laufen gibt es zwei Kopien des Modells in dem Bündel; die alte und die neue, die im Innern des momd Bündels.

Doing ein Projekt -.> Sauber Alle werden dieses Problem beheben

Andere Tipps

Auch wenn Sie Ihre Modelle an jedem beliebigen Punkt umbenennen, sollten Sie und wiederholen Sie den „Set aktuelles Modell“ Schritt zu einem älteren Umstellung auf das neuere Modell dann wieder zurück. Meine Build Einstellung würde sich nicht automatisch zurück und hielt den „aktuellen Modellnamen“ auf ein nicht vorhandenes Modell einstellen, was in der exakt gleichen Problem.

Sie können immer überprüfen, diese Einstellung in der Ressource-Build-Produktordner des korrekt ist, im Inneren des importierten .momd Verzeichnis, in einer Datei versioninfo.plist genannt -. Die Einstellung für das aktuelle Modell den tatsächlichen Namen des Modells übereinstimmen

Ich habe, dass die mergedModelFromBundel Verwendung gefunden: Methode scheint nicht mit der Migration zu arbeiten; Ich wechselte zu -initWithContentsOfURL :, und es funktioniert gut. Beachten Sie, dass Sie es init mit einer URL, die auf eine „.momd“ Datei.

Wenn Sie Ihr Datenmodell an jedem beliebigen Punkt ändern, müssen Sie Inhalte und Einstellungen im Simulator auf Reset, oder Sie werden den Fehler, dass die Version des Modells erhalten verwendet, um den Laden zu machen ist nicht das gleiche wie das Modell verwendet Zugriff es.

Danke an alle!

Dies alles funktioniert, aber erst, nachdem ich die Clean Build-Option verwendet wird.

Sehen Sie dieses andere Stack-Überlauf Thema für weitere Informationen: Mit mergedModelFromBundles: und Versionsverwaltung (Coredata)

Das iPhone Core Data Reference hat eine recht ordentlich aufzuschreiben zu diesem Thema. Der formale Prozess der Dokumentation ist eine „Automatische Leichte Migration“.

Nochmals vielen Dank, --Batgar

Zunächst keine der genannten Methoden für mich gearbeitet. Ich bin mit XCode 4. Performed Clean, Clean Build-Ordner, die .app-Datei befindet sich zu überprüfen, gibt es keine andere .xcdatamodel Datei dort mit Ausnahme der richtigen (enthält sowohl alte als auch neue Versionen). Versuchte initWithContentsOfURL zu verwenden :. Verifizierte die aktuelle Version entspricht die richtigen und tat Reset-Inhalt und Einstellungen auf dem Simulator. Dann den VersionInfo.plist bearbeitet und entdeckt, dass die NSManagedObjectModel_CurrentVersionName Wert entspricht ein nicht existierenden Versionsnamen!

zurückgesetzt, so die aktuelle Version Name für einige bestehende Modell (Sie dann auf das grüne Häkchen sehen zu ändern), neu aufgebaut und es hat funktioniert.

Zu Ihrer Information!

Leider ist für mich, es war kein Problem der Reinigung oder Versionierung. Ich habe ein etwas kompliziertes Projekt mit mehreren Schichten von verschachtelten Xcode-Projekten. das Problem eines jeden Projekts zu behandeln in verschiedenen SVN-Repository zu sein, habe ich die Pfade zu meinen Projekten wie in Bezug auf einige spezifische Quelle Bäume, dass ich in den Xcode „Einstellungen -> Locations“ eingerichtet. So stelle ich FACEBOOK_IOS_SDK_SRC, um "~ / Dokumente / {my_crazy_folder_structure} / facebook-ios-sdk / src" nach oben. Auf diese Weise, wenn meine Kollegen mein Projektes Kasse, die Lage der Facebook-SDK in Bezug auf was auch immer Weg, den sie gründeten und nicht auf ihren Maschinen in der exakt gleichen Struktur sein, wie es auf meinem. Ich weiß, es gibt bessere Möglichkeiten, dies zu handhaben, aber es funktioniert jetzt.

Wie auch immer - meine Frage kam, weil ich irgendwann meinen * .xcdatamodel Datei Standort hatte als „Relativ zu {source_tree_path}“, die die Datei ganz gut gefunden, und sogar in eine * .mom Datei kompiliert, aber ich war diese verrückten Fehler immer in der Ausgangsfrage aufgeführt. Ich änderte meinen Standort „Im Vergleich zu Gruppe“ und es begann zu arbeiten. Ich habe festgestellt, nicht den genauen Grund dafür noch nicht, aber es verschwendete das bessere Teil eines Tages zu untersuchen. Hoffentlich hilft jemand anderes heraus in der Zukunft.

begann ich Abstürze für [[NSManagedObjectModel mergedModelFromBundles:nil] immer auch, ohne Fehlermeldung (typische Kerndaten). Ich löste es schließlich durch die Erkenntnis, dass ich mit dem gleichen Namen zwei Entitäten in verschiedenen Modellen genannt hatte. Deshalb war es für mich abstürzt. Ändern der Namen hörte es abstürzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top