UITableView与NSFetchedResultsController reloadData但不移动单元格

时间:2012-09-02 06:44:30

标签: objective-c uitableview nsfetchedresultscontroller nsnotificationcenter

我有一个带有NSFetchedResultsController的UITableView。

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

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

然而,NSFetchedResultsController在NSManagedObject属性'pname'上有一个排序顺序。

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

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

1 个答案:

答案 0 :(得分:7)

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

因此,在重新分配代表后,您必须致电

[self.fetchedResultsController performFetch:&error]

首先

[self.tableView reloadData];