1

在 iOS 5.0 应用程序上使用 Restkit (0.10.3)+core 数据时出现问题。我有一个实体 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 的已发布待办事项。但后来我得到了一个待办事项列表,我又检索了两个对象 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.

总之,我在对象存储中有 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`\

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

干杯。

4

0 回答 0