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