5

有没有办法在更改 fetchedResultsControllers NSpredicate (并执行提取)后更新 UITableView 部分和行?当我的 searchBar 中的 searchText 更改时,我想使用 controllerWillChangeContent 委托方法来更新我的表。

目前在我的应用程序中,这些委托方法仅在核心数据发生更改时才会被调用。不是在更改 resultsController 谓词和执行提取时。

如果我只是self.tableView reloadData]在每个 textchange 上调用 [,则没有动画,它会有点阻碍体验。

或者我应该做一些完全不同的事情来更新每个搜索文本条目更改的 tableView 内容?

4

4 回答 4

8

我再次查看了 Apple 的文档,看起来当谓词更改时 NSFetchedResultsControllerDelegate 方法没有被调用:

NSFetchedResultsController 的一个实例使用此协议中的方法来通知它的委托,控制器的获取结果由于添加、删除、移动或更新操作而发生了更改。

所以,回答我自己的问题:在 NSFetchedResultsController 谓词更改后,无法使用 NSFetchedResultsControllerDelegate 更新表。

于 2011-01-02T11:09:47.983 回答
0

[self.tableView reloadData]试着打电话

-(void)viewWillAppear:(BOOL)animated;
                 or
-(void)viewDidAppear:(BOOL)animated;
于 2011-01-01T15:22:31.353 回答
0

您可以尝试使用传入所有部分的UITableView方法。这样,您应该重新加载整个内容,但仍然可以获得您选择的动画。reloadSections:withRowAnimation:NSIndexSet

如果要添加和删除行,则需要使用insertSections:withRowAnimation:removeSections:withRowAnimation:。如果您同时进行多项更改,您还应该在调用beginUpdates和之间进行更改endUpdates

于 2011-01-01T18:25:49.813 回答
0

来自 NSFetchedResultsController 类参考:

修改获取请求

您不能简单地更改获取请求来修改结果。如果要更改获取请求,则必须:

如果您正在使用缓存,请将其删除(使用 deleteCacheWithName:)。如果要更改获取请求,通常不应使用缓存。

更改获取请求。调用 performFetch:。

由于您更改了谓词,因此您必须再次调用 performFetch: ,然后委托将处理从那里更新表。

于 2011-01-01T22:33:16.303 回答