批量更新表行,同时重新排序和更新?
Posted
技术标签:
【中文标题】批量更新表行,同时重新排序和更新?【英文标题】:Batch update table row, reorder & update at the same time? 【发布时间】:2016-11-27 14:01:17 【问题描述】:说明
我有一个名为 Person 的 CoreData 条目,我使用 NSFetchedResultsController 获取它,其中 fetchRequest 按属性“名称”排序。然后我在表格视图单元格中显示“名称”。
问题
当我更改实体的“名称”属性并对行重新排序时,NSFetchedResultsControllerDelegate
确实给了我一个NSFetchedResultsChangeType.move
。但是单元格上显示的“名称”已经过时,这意味着我没有收到NSFetchedResultsChangeType.update
Table View Programming Guide: Inserting and Deleting Rows and Sections 表示批量更新首先进行更新,然后是删除,最后是插入。
它将任何行或节的插入推迟到它处理了行或节的删除之后。表格视图的行为方式与在更新块内调用的重新加载方法相同——在执行动画块之前,重新加载是针对行和节的索引进行的。无论插入、删除和重新加载方法调用的顺序如何,都会发生此行为。
问题
知道NSFetchedResultsController
发送的通知是如何实现的,特别是插入、删除、更新和移动的顺序吗?
或者我怎样才能使用某种代码来有效地(意味着部分更新,而不是重新加载所有数据)解决这个特定问题?
【问题讨论】:
【参考方案1】:您的设置不标准。 sectionNameKeyPath
确实适用于 sections 而不是 rows。获取Person
实体并通过itemForRowAtIndexPath
直接用人名填充单元格。
然后您将获得预期的更改类型。
【讨论】:
我的错。我实际上是指获取请求排序描述符。问题已更新。设置sectionNameKeyPath
不应该与您的获取请求顺序冲突。而且即使我不把对象分成几个部分,问题仍然存在。
那么问题出在哪里?你现在有.move
作为行的委托回调中的一个选项,对吧?以上是关于批量更新表行,同时重新排序和更新?的主要内容,如果未能解决你的问题,请参考以下文章