iOS 5.0 アプリで Restkit (0.10.3) + コア データを使用すると問題が発生します。次のようにマッピングされたエンティティ ToDo があります。
RKManagedObjectMapping* map = [self mappingInObjectStore];
[map mapKeyPathsToAttributes:
@"id" , @"todoID" ,
@"message" , @"detail" ,
@"created_at" , @"createdAt" ,
@"updated_at" , @"updatedAt" ,
@"public_location",@"publicLocation",
nil];
map.primaryKeyAttribute = @"todoID";
[map mapKeyPath:@"location" toRelationship:@"location" withMapping:[TDLocation mapping]];
TDLocation は、long、lat、... を持つ単純なエンティティです。
[TDTodo object] メソッドを使用して TODO オブジェクトを作成し、todoID を除いて必要なすべてのデータを設定しました (バックエンドによって埋められるため)。後で私は投稿を行います:
[RKObjectManager sharedManager] postObject:todo usingBlock:^(RKObjectLoader *loader) {
loader.onDidLoadResponse= ^(RKResponse *response){
if (response.isOK || response.isCreated) {
id parsedData = [response parsedBody:nil];
todo.todoID = [NSNumber numberWithInt: [[parsedData valueForKeyPath:@"acceptedTodo.id"] intValue]]; //just get the assigned id from backend
}
[loader cancel];
};
}];
ここまでは、すべて問題ありません。[TDTodo allObjects] を実行すると、投稿された todo が割り当てられた ID で取得されます。しかし、後で todo リストを取得し、投稿された todo と同じ情報を含む TDTodo オブジェクトをさらに 2 つ取得したので、[TDTodo allObjects] を実行します。
{todoID: 1, ...}//posted todo
{todoID: 1, ...} // from the backend with the same info and id that the posted todo
{todoID: 2, ...} // from the backend with the same info that the posted todo, but diff id.
結論として、オブジェクト ストアに同じオブジェクトのインスタンスが 3 つ (3 つ) 複製されています。この問題を検索しましたが、有効な解決策が見つかりませんでした。
前もって感謝します
UPDATE 1 「バックエンドでのエンティティの重複作成」という問題の一部を解決しました。これは、応答/ローダーをキャンセルしようとすることによって生成されました。具体的には、次の指示です。
[loader cancel];
また、私は試しました:
[response.request cancel];
[response.request.delegate = nil;
しかし、これは重複も生成します。したがって、この指示を削除すると、問題のその部分が修正されます。
ただし、objectStore にはまだ重複があります。
{todoID: 1, ...}//posted todo`
{todoID: 1, ...} // from the backend with the same info and id that the posted todo`\
どうすればこれを解決できますか? Webで見つけたすべてのソリューションを試しました:-(
乾杯。