NSMergeConflict auf iOS7

8

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:

%Vor%

Unter iOS6 tritt dieses Problem nicht auf.

Aktualisierung: Code für managedObjectContext

%Vor%

}

    
user2393695 04.10.2013, 10:25
quelle

6 Antworten

16

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.)

    
sclamage 16.10.2013 15:51
quelle
15

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%     
Minna zacharias 04.10.2013 10:50
quelle
5

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.

    
ffabri 08.06.2015 15:44
quelle
1

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.

%Vor%     
Joseph 21.09.2017 09:25
quelle
0

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.

    
Takayuki Sato 26.07.2014 07:00
quelle
0

Ich habe das beim Testen mit einem vollen Speicher bekommen. Es scheint also, dass jede Art von Fehler beim Zusammenführen (in meinem Fall ist der Speicher voll und der persistente Speicher kann nicht aktualisiert werden) generiert dies.

    
chadbag 18.09.2014 21:57
quelle

Tags und Links