CoreData nicht erfüllen konnte, eine Schuld, wenn Objekte aktualisiert werden, indem HTTP-service

Ich glaube, ich verstehe die Fehlermeldung: CoreData nicht erfüllen konnte, eine Schuld, aber ich bin nicht sicher, wie ich damit umgehen soll.

Wir haben eine Anwendung, wo wir Core-Daten zu bestehen zurückgegebenen Daten aus einer JSON-service. Heute mache ich die folgenden.

  1. Holen lokales Objekt vom persistenten Speicher und zurück zu UI
  2. Bitten den server, wenn das Objekt aktualisiert wird, wenn ich die Antwort bekommen, ich update den Core Data verwalteten Objekt
  3. Update UI mit dem aktualisierten Objekt

Das problem ist; auch wenn ich nicht mit mehreren threads, die ich manchmal zu einem Fehler kommt, wenn der HTTP-request löscht verwaltete Objekte, die meine Benutzeroberfläche beibehalten hat. Ich habe versucht, um die Objekte abzurufen, die mit returnsObjectsAsFaults KEINE. Ich dachte, ich könnte dann den Zugriff auf alle Beziehungen und Eigenschaften eines verwalteten Objekts, auch wenn es gelöscht wurde (so lang wie mein UI behalten hatte).

Wie soll ich dieses Problem lösen?

Dachte ich, ich könnte mit separaten NSManagedObjectContext für Lesen und schreiben. Ich habe an diesem test:

MyAuthorMO *authorUpdate = [[MyAuthorMO alloc] init]; //I have made this init insert the object into the updateContext
authorUpdate.firstname = @"Hans";
authorUpdate.lastname = @"Wittenberg";
authorUpdate.email = @"[email protected]";

NSManagedObjectContext *updateContext = [[MyCoreManager getInstance] managedObjectContext];

NSError *error = nil;
[updateContext save:&error];

NSManagedObjectContext *readContext = [[MyCoreManager getInstance] readOnlyContext];

NSFetchRequest *fetchRequest = [managedObjectModel fetchRequestFromTemplateWithName:@"authorByEmail" substitutionVariables:[NSDictionary dictionaryWithObject:@"[email protected]" forKey:@"EMAIL"]];
[fetchRequest setReturnsObjectsAsFaults:NO];

NSArray *authors = [readContext executeFetchRequest:fetchRequest error:&error];

MyAuthorMO * readAuthor = [authors objectAtIndex:0];

//Delete the author with update context:
[updateContext deleteObject:authorUpdate];
[updateContext save:&error];

NSLog(@"Author: %@ %@, (%@)", readAuthor.firstname, readAuthor.lastname, readAuthor.email);

Log ausgegeben wird nur gut, solange ich die readContext für den fetch. Wenn ich die updateContext für die Holen, bekomme ich eine exception. Das sieht vielversprechend aus, aber ich fürchte, dass ich Probleme in einer späteren Phase. Früher oder später werde ich wahrscheinlich versuchen, auf eine Eigenschaft zuzugreifen, die nicht abgeholt vollständig (ein Fehler). Wie kann ich erreichen, das Verhalten, die ich Suche?

Nick, hast du wahrscheinlich Recht. Ich habe gelesen, durch meine früheren Beiträge und akzeptiert die besten Lösungen. Vielen Dank für Ihren Kommentar.

InformationsquelleAutor Andi | 2010-09-09

Schreibe einen Kommentar