在 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`\
我该如何解决这个问题?我尝试了我在网上找到的所有解决方案:-(
干杯。