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