したがって、RestKit は、メッセージをに送信する前にコンテキストが保存されることを期待していることがわかります。私の問題は、メッセージの直後にコンテキストを保存していたことです(ローダーがWebサービスから応答を返す前であるため、これは問題ないと思いました。私は次のようなことをしていました:postObject:mapResponseWith:delegate
RKObjectManager
postObject:mapResponseWith:delegate
NSManagedObject *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"MyObjects" inManagedObjectContext:context];
[[RKObjectManager sharedManager] postObject:myObj mapResponseWith:objMappingForPOST delegate:myObjLoader];
[context save:&error];
...その後、myObjLoader
応答が返され、(createdAt、parse の objectId など) のプロパティを更新しようとしmyObj
、myObj が存在しないというエラーをスローします。
確認のためにRestKitコードを実際に読む必要がありますが、何が起こっているのかは、メッセージが受信RKObjectManager
された時点で管理オブジェクトストアからバックグラウンドスレッドとコンテキストが作成され、潜在的なマージで更新されないことであると確信していますpostObject:mapResponseWith:delegate
応答が返される前に存在する可能性があります。正直なところ、応答が受信されたらコンテキストが作成されると思っていました。
postObject:mapResponseWith:delegate
そのため、次のように、メッセージを送信する前にコンテキストを保存する必要があります。
NSManagedObject *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"MyObjects" inManagedObjectContext:context];
[context save:&error];
[[RKObjectManager sharedManager] postObject:myObj mapResponseWith:objMappingForPOST delegate:myObjLoader];