UITableView 与 NSFetchedResultsController reloadData 但不移动单元格

Posted

技术标签:

【中文标题】UITableView 与 NSFetchedResultsController reloadData 但不移动单元格【英文标题】:UITableView with NSFetchedResultsController reloadData but does not move cell 【发布时间】:2012-09-02 06:44:30 【问题描述】:

我有一个由 NSFetchedResultsController 支持的 UITableView。

当控制器离开屏幕时,我按照建议辞去获取的控制器代表的职务。 因此我完全依赖上下文通知和 reloadData。

基本上,当在插入/更新/删除的对象中存在表的相关实体和属性时,我会分析通知并设置标志 needsReload=YES。 在 viewWillAppear 我检查这个变量并调用 reloadData。

但是 NSFetchedResultsController 对 NSManagedObject 属性“pname”有一个排序顺序。

当在其他视图控制器中我将 pname 说从 0name 更新为 Zname 时,我可以拦截上下文确实更改通知,并且表在下一个 viewWillAppear 正确重新加载。

问题是,由于排序顺序,我希望单元格位于底部,但我想它仍然在顶部更新,因为 reloadData 仅更新可见单元格。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

如果您将其委托设置为nil,则获取的结果控制器不再跟踪托管对象上下文中的更改。

因此,在重新分配委托后,您必须调用

[self.fetchedResultsController performFetch:&error]

先是后

[self.tableView reloadData];

【讨论】:

好的,谢谢,那我必须重新发出 fetch。性能问题呢,尤其是大行集。还有,你对离开屏幕时辞职代表有什么看法。我听到很多人建议这样做,但没有人真正记录过这种选择。 @Leonardo:对此我没有明确的答案。我建议使用 Instruments 测试变体和配置文件。这可能取决于与行集大小相比的更改数量。

以上是关于UITableView 与 NSFetchedResultsController reloadData 但不移动单元格的主要内容,如果未能解决你的问题,请参考以下文章

UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview

如何与重叠显示的 UITableView 交互另一个 UITableView

UIView 与 UITableview 和 UIImageview,使用 reloadData 访问 UITableview

等待用户完成与 UITableView 的交互

UITableView 与 UIScrollView

UISearchController 与 UITableView?