我很难在UITableView中只显示来自NSFetchedResultsController的20行。
目前UITableView显示来自NSFetchedResultsController对象的所有数据:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[self.fetchedResultsController fetchedObjects] count];
}
我要做的是先显示20行,然后当用户滚动到21行时,它会再加载20行。但在此之前,我想了解如何限制tableView行。
我四处搜寻,尝试过别人的建议,但仍然缺乏理解。请指导我...
答案 0 :(得分:2)
NSFetchRequest
有一个名为fetchLimit
的方法。您可以将其设置为20,它只能获取20。
话虽如此,我不太清楚为什么你想要你所描述的。
答案 1 :(得分:0)
而不是:
return [[self.fetchedResultsController fetchedObjects] count];
使用:
return (20 * X);
其中X是您向表格视图添加了更多结果的次数,当然也受到CoreData数据库中记录数量的限制。
这里的诀窍是根据您的UI决定如何触发对X增量的更改。一旦增加X,就可以调用UITableView的[insertRowsAtIndexPaths: withRowAnimation:]
method。
当然,您需要确保您的后备商店与表格中当前显示的内容相匹配(这使得iBlue的答案非常相关......还有+1给他们!)。
答案 2 :(得分:0)
fetchedObjects数组的计数可能不是您想要执行的操作,因为它不会更新持久性存储中的更改。来自NSFetchedResultsController文档:
结果数组仅包含由提取请求(fetchRequest)指定的实体的实例,并且与其谓词匹配。 (如果获取请求没有谓词,则结果数组包含获取请求指定的实体的所有实例。)
结果数组反映了控制器的托管对象上下文中托管对象的内存中状态,而不是持久性存储中的状态。但是,返回的数组不会在插入,修改或删除托管对象时更新。
如果您只想获取20个对象,请设置NSFetchRequest的获取限制。如果只想在内存中保留20个对象,请使用NSFetchRequest对象的setBatchSize。
答案 3 :(得分:-1)
看看这个例子 - 这个实现包括pull to refresh以及你想要实现的“加载更多”效果:)