iOS UITableView:仅显示来自fetchedResultsController的20行,其中包含500个对象

时间:2012-08-09 19:24:37

标签: ios uitableview nsfetchedresultscontroller

我很难在UITableView中只显示来自NSFetchedResultsController的20行。

目前UITableView显示来自NSFetchedResultsController对象的所有数据:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[self.fetchedResultsController fetchedObjects] count];
}

我要做的是先显示20行,然后当用户滚动到21行时,它会再加载20行。但在此之前,我想了解如何限制tableView行。

我四处搜寻,尝试过别人的建议,但仍然缺乏理解。请指导我...

4 个答案:

答案 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以及你想要实现的“加载更多”效果:)

https://github.com/shiki/STableViewController