0

我正在努力在 UITableView 中仅显示来自 NSFetchedResultsController 的 20 行。

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

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

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

我四处寻找,尝试了其他人的建议,但仍然缺乏理解。请引导我走向光明...

4

4 回答 4

2

NSFetchRequest有一个方法叫做fetchLimit. 您可以将其设置为 20,它只会获取 20。

话虽这么说,我不太确定你为什么想要你所描述的。

于 2012-08-09T19:28:34.823 回答
0

The count of the fetchedObjects array might not what you want to do, since it does not update the changes from the persistent store. From NSFetchedResultsController documentation:

The results array only includes instances of the entity specified by the fetch request (fetchRequest) and that match its predicate. (If the fetch request has no predicate, then the results array includes all instances of the entity specified by the fetch request.)

The results array reflects the in-memory state of managed objects in the controller’s managed object context, not their state in the persistent store. The returned array does not, however, update as managed objects are inserted, modified, or deleted.

If you only want to fetch 20 objects, set the fetch limit of the NSFetchRequest. If you want only to keep 20 objects in memory, use setBatchSize of the NSFetchRequest object.

于 2012-08-09T19:40:37.783 回答
0

代替:

return [[self.fetchedResultsController fetchedObjects] count];

利用:

return (20 * X);

其中 X 是您向表格视图添加更多结果的次数,当然也受到 CoreData 数据库中记录数量的限制。

这里的技巧是根据您的 UI 来决定如何触发对 X 增量的更改。一旦你增加了 X,你就可以调用 UITableView 的[insertRowsAtIndexPaths: withRowAnimation:]方法

当然,您需要确保您的后备商店与表中当前显示的内容相匹配(这使得 iBlue 的答案也非常相关......对他们+1!)。

于 2012-08-09T19:29:12.983 回答
-1

看看这个例子——这个实现包括拉动刷新和“加载更多”效果,你正在努力实现:)

https://github.com/shiki/STableViewController

于 2012-08-09T19:30:07.903 回答