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

Core data RestKit 0.20.x如何从表视图发布/放置/删除(创建/更新/删除),core-data,restkit,restkit-0.20,Core Data,Restkit,Restkit 0.20,使用RestKit 0.20.3。将post/put/delete(create/update/delete)调用放置在获取结果控制器的didChangeObject:(id)…forChangeType方法中不起作用 在从数据库中获取最新条目时,获取的结果控制器(FRC)会获取新插入的检索记录的插入通知。这将导致一个复制对象的POST。这篇文章本身就引起了两篇文章和五篇文章。第一个帖子是RestKit(RK)检索和ID。第二个帖子是导致该帖子的帖子。PUTS结果来自两个帖子的更新,每个帖子都会

使用RestKit 0.20.3。将post/put/delete(create/update/delete)调用放置在获取结果控制器的
didChangeObject:(id)…forChangeType
方法中不起作用

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


-(void)控制器:(NSFetchedResultsController*)控制器didChangeObject:(id)索引路径中的一个对象:(NSIndexPath*)变更类型的indexPath:(NSFetchedResultsChangeType)类型newIndexPath:(NSIndexPath*)newIndexPath{
开关(类型){
案例NSFetchedResultsChangesInsert:
[self.timeEntryTableView insertRowsAtIndexPaths:@[newIndexPath]带RowAnimation:UITableViewRowAnimationFade];
//通过RKObjectManager调用RK将POST与对象排队
打破
案例NSFetchedResultsChangeDelete:
[self.timeEntryTableView deleteRowsAtIndexPaths:@[indexPath]带RowAnimation:UITableViewRowAnimationFade]////
//通过RKObjectManager调用RK将删除与对象排队
打破
案例NSFetchedResultsChangeUpdate:
[self.timeEntryTableView重新加载rowsatindexpaths:@[indexath]带rowanimation:UITableViewRowAnimationFade];
//通过RKObjectManager调用RK将PUT与对象排队
打破
…
}
}

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


当前对的回答将对我有所帮助。

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

FRC用于更新表视图。因此,当您执行提取时,您将获得一些对象的插入,这些对象以前不在FRC数据集中,但现在在FRC数据集中。您的代码将其误解为新对象,而实际上并非如此(大多数情况下)

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


更新时,应考虑在上传成功后修改和重置任何应该上传的属性,然后将“<代码>更改为标志添加到您的实体中。使用此选项可筛选put。

如何定义不必要的
?FRC将收到变更通知,但不一定是复合变更。这还取决于你如何保存主运行中心,以及如何发布通知……你的评论让我怀疑这种方法实际上可能是正确的,我可能犯了一些其他错误。我创建了一个较小的测试应用程序来验证不良行为,并验证了我的怀疑,即这根本不是正确的方法。你会发现这个问题的词干被更清晰地描述了不良行为。是的,我认为正确的方法可能与保存托管对象上下文有关。我对答案投了赞成票,因为它是有效的,并为插入案例的帖子添加了示例代码。您可以在找到完整的示例应用程序。答案和应用程序对我来说并不完全令人满意,因为我希望RestKit能为我做这种簿记,根据需要根据观察对象的变化提出请求,并以或多或少的自以为是的方式进行RESTful调用。如果是这样,那么这个答案和参考样本是错误的。因此,我没有将答案标记为已接受。非常感谢。RestKit没有这样的自动化功能(目前)。有一个分支,有人在为版本0.1x开发它,但它从未达到0.2x。一般来说,这不是一个需要解决的小问题,但您可能希望在RestKit google group上讨论它,或者提出一个github问题。根据您的断言,我已将此答案标记为已接受的答案。谢谢你的回复。