Ich habe meine App aktualisiert, um iOS 7 zu unterstützen, und bin mit dem Problem konfrontiert worden, dass auf einem der Bildschirme in meinem [context save];
der folgende Fehler angezeigt wird:
Unter iOS6 tritt dieses Problem nicht auf.
Aktualisierung: Code für managedObjectContext
%Vor%}
Ich habe gerade zwei Tage damit verbracht, den exakt gleichen Fehler zu debuggen. Der Unterschied zwischen deiner App und meiner ist, dass meine nur auf Core-Daten aus dem Hauptthread zugreift, daher war der Merge-Fehler noch rätselhafter.
In unserem Fall beschränkte ich mich auf die Tatsache, dass wir eine unidirektionale Beziehung hatten - A hat viele Bs (modelliert als NSSet), aber B kennt sein A nicht. Wir hatten eine Methode, die sowohl A als auch a B, und würde einen Zusammenführungsfehler verursachen, wenn wir diese Änderungen speichern wollten. Dieser Code funktionierte für iOS 5 & amp; 6, und nur auf iOS 7 fehlgeschlagen.
Es ist richtig, dass das Hinzufügen einer Merge-Richtlinie den Fehler aufhebt, aber auch andere Fehler maskiert. In unserem Fall würden wir diese Fehler lieber sehen als zu riskieren, eine inkonsistente DB zu haben.
Durch die Änderung der Beziehung zu bidirektional wurde der Fehler behoben. Die hinteren Links sind für unsere App nicht notwendig, aber sie sind auch nicht schmerzhaft. (Und glücklich, diese Beziehung zu ändern wurde korrekt als eine leichte Migration gehandhabt - Kerndaten füllten automatisch diese hinteren Verbindungen für uns aus.)
Laut der Apple-Dokumentation
NSManagedObjectMergeError = 133020
Dieser Fehlercode, der angibt, dass eine Zusammenführungsrichtlinie fehlgeschlagen ist - Core Data kann die Zusammenführung nicht abschließen.
Gibt es in Ihrem Code eine Zusammenführungsrichtlinie? Bitte versuchen Sie NSMergeByPropertyObjectTrumpMergePolicy.
%Vor%Wenn ich Xcode 6.3.2 mit der Apple Watchkit-Erweiterung verwende, habe ich denselben Fehler, wenn ich versuche, mehrere Aktualisierungen und Speicherungen vorzunehmen. Die setMergePolicy hat das Problem gelöst und hier ist der schnelle Code:
%Vor%Stellen Sie sicher, dass Sie die obige Zeile vor den Befehl context.save setzen.
Ich wollte ein potenzielles Problem nicht maskieren, indem ich eine Zusammenführungsrichtlinie festlege, ohne zu verstehen, was die NSMergeConflict
zuerst verursacht hat.
In meiner Situation hatte ich eine NSBatchDeleteRequest
früher in meinem Code ausgeführt. Das NSBatchDeleteRequest
wird direkt im Koordinator des persistenten Speichers ausgeführt, so dass ManagedObjectContext
die Löschungen nicht bemerkt hat und immer noch Verweise auf gelöschte Objekte enthielt. Als ich später auf eines dieser Objekte referenzierte und versuchte, den Kontext zu speichern, wurde NSMergeConflict
geworfen.
Der Aufruf von reset()
auf meinem moc
nach dem Löschen hat das Problem behoben.
Ich habe einen ähnlichen Fehler bekommen, und in meinem Fall hat das Sperren von NSPersistentStoreCoordinator funktioniert.
%Vor%Ich weiß nicht, warum das funktioniert, aber ich vermute den Fehler von NSManagedObjectContext. Ich hoffe, das wird helfen.
Tags und Links objective-c ios merge core-data