Restkit-Core数据:发布时ObjectStore和Backend中的重复对象

时间:2012-11-09 16:53:37

标签: core-data restkit duplicate-data

在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],我会获得带有指定ID的发布的待办事项。但后来我做了一个todo列表,我检索了两个更多的对象TDTodo包含与发布的待办事项相同的信息,所以我做[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.

总之,我在对象Store中有3(3)个相同对象的重复实例。我搜索了这个问题,但找不到合适的解决方案。

提前致谢

更新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`\

我怎么解决这个问题?我尝试了在网络上找到的所有解决方案: - (

干杯。

0 个答案:

没有答案