1

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で見つけたすべてのソリューションを試しました:-(

乾杯。

4

0 に答える 0