有没有办法在更改fetchedResultsControllers NSpredicate(并执行提取)后更新UITableView节和行?当searchBar中的searchText发生变化时,我想使用controllerWillChangeContent委托方法来更新我的表。
目前在我的应用程序中,只有在coredata发生更改时才会调用这些委托方法。不是在更改resultsController谓词和&执行提取。
如果我只是在每个文本转换上调用[self.tableView reloadData]
,那么就没有动画,它会阻止这种体验。
或者我应该做一些完全不同的事情来更新每个搜索文本条目更改的tableView内容吗?
答案 0 :(得分:8)
我已经对Apple的文档进行了另一次研究,看起来当谓词发生变化时,不会调用NSFetchedResultsControllerDelegate方法:
一个实例 NSFetchedResultsController使用 本协议中的方法通知其 委托控制器的提取 由于一个结果已经改变 添加,删除,移动或更新 操作
所以,回答我自己的问题:在NSFetchedResultsController谓词发生变化后,不可能使用NSFetchedResultsControllerDelegate来更新表。
答案 1 :(得分:0)
尝试在
中拨打[self.tableView reloadData]
-(void)viewWillAppear:(BOOL)animated;
or
-(void)viewDidAppear:(BOOL)animated;
答案 2 :(得分:0)
您可以尝试使用UITableView
方法reloadSections:withRowAnimation:
传递NSIndexSet
所有部分。这样你应该重新加载整个东西,但仍然可以选择你想要的动画。
如果要添加和删除行,则需要使用insertSections:withRowAnimation:
和removeSections:withRowAnimation:
。如果您一次进行了大量更改,则还应在调用beginUpdates
和endUpdates
之间进行更改。
答案 3 :(得分:0)
来自NSFetchedResultsController类参考:
修改获取请求
您不能简单地将获取请求更改为 修改结果。如果你想 更改获取请求,您必须:
如果您使用缓存,请将其删除 (使用deleteCacheWithName :)。 通常,您不应使用缓存 如果您要更改提取请求。
更改提取请求。调用 performFetch:
由于您已更改谓词,因此必须再次调用performFetch:然后委托将处理从那里更新表。