Permanent NSManagedObjectID nicht so dauerhaft?

9

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%     
brianpartridge 31.08.2012, 15:28
quelle

2 Antworten

18

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:

  1. Innerhalb eines einzigen Lebenszyklus der Anwendung
  2. In seiner ursprünglichen Objektform (nicht im URL- oder NSString-Format)

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.

    
Marcus S. Zarra 31.08.2012, 15:38
quelle
0

Dies liegt möglicherweise daran, dass Sie einen verschachtelten Kontext verwenden.

%Vor%

Ausgaben:

%Vor%     
Daniel Eggert 01.09.2012 13:56
quelle