Ich habe eine App mit zwei verwalteten Objektkontexten Setup wie folgt aus:Core Data: Erhalten Child-Kontexte jemals permanente ObjectIDs für neu eingefügte Objekte?
- Eltern Kontext: NSPrivateQueueConcurrencyType, zu dem persistenten Speicher verbunden.
- Hauptkontext: NSMainQueueConcurrencyType, untergeordnetes Element des übergeordneten Kontexts.
Wenn ein neues verwaltetes Objekt in den Haupt Kontext einzufügen, ich spare den Haupt-Kontext und dann die Elternkontext wie folgt aus:
[context performBlockAndWait:^{
NSError * error = nil;
if (![context save: &error]) {
NSLog(@"Core Data save error %@, %@", error, [error userInfo]);
}
}];
[parentContext performBlock:^{
NSError *error = nil;
BOOL result = [parentContext save: &error];
if (! result) {
NSLog(@"Core Data save error in parent context %@, %@", error, [error userInfo]);
}
}];
Mein Verständnis ist, dass, wenn das Objekt verwalten wird es zuerst erstellt, hat eine temporäre objectID
. Dann wird der Hauptkontext gespeichert und dieses Objekt mit seiner temporären ID gelangt in den übergeordneten Kontext. Dann wird der übergeordnete Kontext gespeichert. Wenn dieser letzte Kontext gespeichert wird, wird das temporäre objectID
im übergeordneten Kontext in eine permanente objectID
umgewandelt.
So:
- Hat die permanente Objekt-ID immer automatisch zurück den main (Kind) Kontext propagiert werden?
- Wenn ich zwingen, das Objekt permanent ID mit
[NSManagedObjectContext obtainPermanentIDsForObjects:error:]
, dann Hintergrund der App zu bekommen, reaktivieren, neu zu laden, erhalten Sie das ObjektobjectWithID:
Hauptkontext verwendet wird, und eine Eigenschaft zuzugreifen, ich„Coredata bekommen könnte keinen Fehler für ... erfüllen ".
Jorge: Ich bekomme eine CoreData konnte einen Fehler nicht erfüllen, wenn Sie eine permanente ID in einem Kindkontext erhalten und ManagedObject speichern. Hast du herausgefunden, was der Grund war? Danke –