Ich habe Probleme mit Objekt-IDs in CoreData. Ich benutze MagicalRecord aus praktischen Gründen und habe 3 Kontexte: einen privaten Warteschlangen-Arbeitskontext, einen Hauptwarteschlangenkontext für UI und Parent für den Arbeitskontext und einen privaten Warteschlangen-Sicherungskontext, der das Hauptkontextelement ist.
Mein Ziel ist es, ein Objekt im Arbeitskontext zu erstellen, im persistenten Speicher zu speichern, seine Objekt-ID-URL in NSUserDefaults zu speichern und dieses MO später mithilfe der objectID abrufen zu können. Was ich jedoch finde, ist, dass sich nach dem Speichern die permanente ID des Objekts ändert.
In der Konsolenausgabe unten sehen Sie, dass, nachdem ich die permanente ID angefordert habe, der Wert, den ich zurückbekomme, "F474F6EE-A225-456B-92EF-AB1407336F15 / CDBaseAccount / p1" ist, aber später, wenn ich alle Objekte in CD aufliste nur Objekt dort hat die ID "F474F6EE-A225-456B-92EF-AB1407336F15 / CDBaseAccount / p2". p1 vs p2, was ist passiert?
Code:
%Vor%Konsolenausgabe:
%Vor%Kurze Antwort ist, tu das nicht:)
-objectID
ist zwischen den Starts Ihrer Anwendung nicht zuverlässig. Es ist garantiert einzigartig und zuverlässig unter den folgenden Bedingungen:
Wenn Sie -objectID
als permanenten eindeutigen Bezeichner behandeln, der außerhalb des persistenten Speichers gespeichert werden soll, werden Sie ziemlich oft scheitern. Core Data ändert die zugrunde liegenden Details von -objectID
viele Male während der Lebensdauer des Objekts.
Wenn Sie ein extern zuverlässiges Unikat benötigen, müssen Sie es selbst erstellen. Ich empfehle generell, [[NSProcessInfo processInfo] globallyUniqueString]
zu einer Entität hinzuzufügen, die eine extern referenzierbare Unikate benötigt. -awakeFromInsert
ist ein großartiger Ort, um das zu tun.
Dies liegt möglicherweise daran, dass Sie einen verschachtelten Kontext verwenden.
%Vor%Ausgaben:
%Vor%Tags und Links core-data magicalrecord nsmanagedobject