我有一个标签式应用程序,它有2个标签,带有2个UITableView
我还有2个NSFetchedResultsController类型对象,但它们都在同一个实体上,具有不同的排序和不同的获取限制。
当我从Internet下载更多对象并将它们插入数据库时,我的NSFetchedResultsController类型对象将忽略fetchLimit。对于第一个我设置fetchLimit为10,第二个我设置fetchLimit为50.最初我在数据库中有10个对象。一切都好。下载了40多个对象之后,第一个对象也加载了40个对象,但它的fetchLimit为10.
这有什么问题?
答案 0 :(得分:2)
NSFetchedResultsController忽略fetchLimit,以防观察者上下文发生变化。
我认为当你被限制为fetchlimit时,通过momc观察正确更新表并不是那么简单。
解决方案#1
因此,如果发生了大的更新,您应该重新获取数据。
所以你应该在FRC委托中做这样的事情:
- (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];
}
}
答案 1 :(得分:-2)
NSFetchRequest的获取限制是从数据存储执行提取时使用的限制。它并不打算限制获取的结果数组的大小。如果要限制tableview中显示的单元格总数,则应该使用UITableView的tableView:numberRowsForSection:
来限制它。
如果你真的想设置一个只显示10个项目的限制(比如显示前10个列表),那么可能没有真正的理由使用超过1个部分。如果使用numberOfSectionsInTableView:
将tableView中的节数限制为1,并使用tableView:numberRowsForSection:
将该节中的行数限制为最多10行,那么无论有多少记录,您的表将始终显示最多10条记录记录被添加到数据存储中。
您可以使用排序描述符来排序由NSFetchedResultsController实例管理的对象,我想这对于显示前10个列表非常有用。