我有一个选项卡式应用程序,它有 2 个选项卡和 2 个 UITableView。
我也有 2 个 NSFetchedResultsController 类型的对象,但它们都在同一个实体上,具有不同的排序和不同的获取限制。
当我从 Internet 下载更多对象并将它们插入数据库时,我的 NSFetchedResultsController 类型对象将忽略 fetchLimit。对于第一个,我将 fetchLimit 设置为 10,对于第二个,我将 fetchLimit 设置为 50。最初我在数据库中有 10 个对象。一切安好。在我下载了更多 40 个对象后,第一个也加载了更多 40 个对象,但它的 fetchLimit 为 10。
这有什么问题?
最佳答案
NSFetchedResultsController 忽略 fetchLimit,以防它观察到上下文更改。
我认为,当您仅限于 fetchlimit 时,通过 momc 观察正确更新表并不是那么简单的操作。
解决方案 #1
因此,如果发生大更新,您应该重新获取数据。
所以你应该在 FRC 委托(delegate)中做这样的事情:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.tableView endUpdates];
if (bigChangesPeformed) {
NSError * error;
// Re-fetching to get correct fetch limit
[self.fetchedResultsController performFetch:&error];
if (error) {
// bla-bla-bla
}
[self.tableView reloadData];
}
}
关于objective-c - NSFetchedResultsController 在 performFetch 后忽略 fetchLimit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9022580/