在 UITableView 中限制 NSFetchedResultsController 的结果

Posted

技术标签:

【中文标题】在 UITableView 中限制 NSFetchedResultsController 的结果【英文标题】:Limit results of NSFetchedResultsController in UITableView 【发布时间】:2013-03-25 19:43:26 【问题描述】:

这可能看起来很愚蠢,但我不知道如何设置 NSFetchedResultsController 的限制。即使设置了 fetchLimit 我仍然得到所有记录。我想将限制设置为 1,以便在“免费增值”模式下只有一个选项,但是当应用解锁时,您会获得完整的表格

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Poem"];
fetchRequest.returnsObjectsAsFaults = NO;
fetchRequest.resultType = NSManagedObjectResultType;
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO selector:nil]];
fetchRequest.fetchLimit = 1;
// setup my predicate
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:kDataContext sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsController.delegate = self;

我还有一个获取数据的方法。此方法旨在在加载时以及用户解锁应用的完整版本时运行。

- (void)refetchData 
    NSError *error = nil;
    [_fetchedResultsController performFetch:&error];
    // handle error

    [self.documentsTable reloadData];

我已经尝试将 UITableView numberOfRowsInSection 设置为返回 1,但随后我收到了警告日志。另外,我觉得这是作弊。我想保持应用以数据为导向。

编辑: 我还可以补充一点,我正在使用 AFIncrementalStore 将我的数据与 Web 服务同步。我不确定这是否会导致任何问题。

【问题讨论】:

问题(我认为)是提取请求仅用于初始提取,而不用于 FRC 的更改跟踪。 【参考方案1】:

奇怪的是 fetchLimit 在这里不起作用。您可以尝试在设置 fetchLimit 的同时将 fetchBatchSize 设置为 1,这应该可以。

【讨论】:

真的很奇怪。我认为您应该考虑使用免费的 Sensible TableView 框架。它具有开箱即用的这些最大对象限制,而且它会自动从您的核心数据实体生成所有 UI 和详细视图。【参考方案2】:

我最终硬编码 -numberOfRowsInSection 以在需要时返回 1。它仍然获取所有内容,真的不知道我能做些什么。

【讨论】:

以上是关于在 UITableView 中限制 NSFetchedResultsController 的结果的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableView 中限制 NSFetchedResultsController 的结果

限制 UITableView 行中显示的核心数据实体

需要在 iOS 中使用 UIPanGestureRecognizer 将 UIImageView 的移动限制在 UITableView 覆盖的区域

如何限制 UITableview 显示的单元格数量?

限制 UItableView 的页眉和页脚的视图宽度

UITableView(VC内部),所有设备尺寸的限制?