RestKit 0.20.x如何从表视图发布/放置/删除(创建/更新/删除)

时间:2014-04-02 02:26:30

标签: core-data restkit restkit-0.20

使用RestKit 0.20.3。在获取的结果控制器的didChangeObject:(id) … forChangeType方法中放置post / put / delete(创建/更新/删除)调用无效。

在从数据库中获取最近的条目时,获取的结果控制器(FRC)获取新插入的检索记录的插入通知。这会导致POST复制对象。帖子本身导致两个POSTS和五个PUTS。第一个POST是RestKit(RK)检索和ID。第二个是导致POST的POST。 PUTS来自两个帖子的更新,每个帖子在FRC中生成更改通知。这样做的主要结果是重复记录,每次刷新时会以2的幂递增。

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { switch (type) { case NSFetchedResultsChangeInsert: [self.timeEntryTableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; // call to RK enqueue a POST with the object via RKObjectManager break; case NSFetchedResultsChangeDelete: [self.timeEntryTableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];//// // call to RK enqueue a DELETE with the object via RKObjectManager break; case NSFetchedResultsChangeUpdate: [self.timeEntryTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; // call to RK enqueue a PUT with the object via RKObjectManager break; … } }

问题是,正确的方法是什么?我相信答案涉及核心数据关系和保存。正在努力。不确定这会导致什么。指针欢迎。

RestKit - Send added/edited/deleted objects after offline storage的当前答案对我有帮助。

1 个答案:

答案 0 :(得分:1)

我假设服务器为新对象分配唯一标识符,因此当您在本地创建对象时,它不会有一个开始。

FRC旨在更新表格视图。因此,当您进行提取时,您将获得许多对象,这些对象在之前但现在不在FRC数据集中。你的代码将它误解为新对象,而实际上它并非(大部分时间)。

您应该检查是否设置了唯一标识符,并且只检查了新对象。从技术上讲,如果您将唯一ID发送到服务器,那么无论如何都不应该获得重复项,因为它可以识别欺骗。

对于更新,您应该考虑在您的实体中添加changed标志,只要上传任何应该上传的属性并在上传成功后重置,就会设置该标志。用它来过滤PUT。