在 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 的结果
需要在 iOS 中使用 UIPanGestureRecognizer 将 UIImageView 的移动限制在 UITableView 覆盖的区域