2

管理対象オブジェクトを作成してコンテキストを保存し、次のように投稿します。

 [[RKObjectManager sharedManager] postObject:tag mapResponseWith:tagMappingForPOST delegate:tagLoader];

tagLoaderオブジェクトを取り戻しますが、RestKit のコンテキストで次のように保存できません。

Failed to save managed object context after mapping completed: The operation couldn’t be completed. (Cocoa error 134030.)

NSUnderlyingException=Cannot update object that was never inserted.

同じクラスの同じバックエンド サーバー (Parse.com) で同じことを行っていますが、正常に動作しています。「挿入されたことのないオブジェクトを更新できません」という潜在的な理由に関する手がかり。エラー?

4

1 に答える 1

3

したがって、RestKit は、メッセージをに送信する前にコンテキストが保存されることを期待していることがわかります。私の問題は、メッセージの直後にコンテキストを保存していたことです(ローダーがWebサービスから応答を返す前であるため、これは問題ないと思いました。私は次のようなことをしていました:postObject:mapResponseWith:delegateRKObjectManagerpostObject: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];
于 2012-06-29T15:58:54.217 に答える