批量更新表行,同时重新排序和更新?

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 作为行的委托回调中的一个选项,对吧?

以上是关于批量更新表行,同时重新排序和更新?的主要内容,如果未能解决你的问题,请参考以下文章

集合上的 Restful PATCH 以批量更新排序参数

mybatis 批量更新数据 mysql批量更新数据

java中大批量更新数据

如何使用 Java 对 MongoDB 中的文档进行批量更新?

sql server有批量插入和批量更新的sql语句吗

关于SQL数据库批量更新和增加的问题。