Es stellt sich also heraus, dass RestKit erwartet, dass der Kontext gespeichert wird vor Senden der postObject:mapResponseWith:delegate
Nachricht an RKObjectManager
. Mein Problem war, dass ich den Kontext direkt nach der postObject:mapResponseWith:delegate
Nachricht (die ich dachte, war ok, weil dies immer noch sein würde, bevor der Lader jemals eine Antwort zurück von der Webservice bekam. Ich tat etwas wie so:
NSManagedObject *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"MyObjects" inManagedObjectContext:context];
[[RKObjectManager sharedManager] postObject:myObj mapResponseWith:objMappingForPOST delegate:myObjLoader];
[context save:&error];
... dann die myObjLoader
eine Antwort zurückerhält und versucht, die Eigenschaften in myObj
(createdAt, parse's objectId, etc.) und werfen einen Fehler, dass myObj nicht existiert.
Ich sollte wirklich durch den RestKit-Code lesen, um zu bestätigen, aber ich bin ziemlich sicher, was passiert ist, dass RKObjectManager
erstellt den Hintergrund-Thread und den Kontext aus dem verwalteten Objektspeicher zu dem Zeitpunkt, zu dem die postObject:mapResponseWith:delegate
Nachricht empfangen wird und nie mit eventuellen Zusammenführungen aktualisiert wird, bevor die Antwort zurückkommt. Um ehrlich zu sein, habe ich erwartet, dass der Kontext erstellt wird, sobald die Antwort eingegangen ist.
Es ist also sinnvoll, den Kontext zu speichern, bevor man die postObject:mapResponseWith:delegate
Nachricht, etwa so:
NSManagedObject *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"MyObjects" inManagedObjectContext:context];
[context save:&error];
[[RKObjectManager sharedManager] postObject:myObj mapResponseWith:objMappingForPOST delegate:myObjLoader];