提供实体计数的 NSFetchedResultsController 对象

Posted

技术标签:

【中文标题】提供实体计数的 NSFetchedResultsController 对象【英文标题】:NSFetchedResultsController object giving counts of entities 【发布时间】:2018-09-06 07:14:09 【问题描述】:

我有一个核心数据,其中一个名为“香烟”的实体具有“时间”属性。在我的表格视图中,我必须用每天的香烟总数填充每个单元格。如何使用 NSFetchedResultsController 来做到这一点?

【问题讨论】:

【参考方案1】:

Apple 有一个示例应用程序,它演示了如何让 FRC 按日期对项目进行分组。遗憾的是,这是一个用 Objective-C 编写的旧应用程序,但 this question 广泛展示了如何在 Swift 中实现它。

您还需要修改标准 FRC tableView 数据源方法和 FRC 自己的委托方法,因为您不希望每个项目都有一个单元格,而是每个“组”(即日期)都有一个单元格。

【讨论】:

感谢您的回答。它给了我一些开始的想法:)【参考方案2】:

要获取特定日期的实体,您必须使用 NSPredicate 获取期望日期实体并将此 Predicate 应用于 NSFetchRequest,您将仅获取该日期实体

【讨论】:

感谢您的回答。我已经更新了我的问题,以便提供清晰的图片 @MohamedWasiq 你可以发布带有问题的获取请求(代码),以便我可以发布确切的解决方案(代码)【参考方案3】:

您可以使用fetchedResultsController 获取数据:

obj-c

NSArray *fetchedData = [_fetchedResultsController fetchedObjects];

斯威夫特

guard let quotes = fetchedResultsController.fetchedObjects else  return 0 

如果您有超过 1 个实体,请为每个实体构建一个 fetchrequest。像这样的东西应该给你所有的对象。

Obj-c

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entity = [NSEntityDescription entityForName:self.entityName inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSError *error;
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];

斯威夫特

var request = NSFetchRequest()
var entity = NSEntityDescription.entity(forEntityName: entityName, in: managedObjectContext)
request.entity = entity
var error: Error?
var results = try? managedObjectContext.fetch(request)

【讨论】:

感谢您的回答。我已经更新了我的问题,以便提供清晰的图片。

以上是关于提供实体计数的 NSFetchedResultsController 对象的主要内容,如果未能解决你的问题,请参考以下文章

在同一个 UITableView 的不同部分显示多个 NSFetchedResultsController

如何选择实体的计数,其中时间序列日期介于该实体的开始日期和结束日期之间

实体框架 DbContext 过滤的计数查询使用变量非常慢

JpaRepository 计数查询 QuerySyntaxException 实体未映射

如何使用实体关系来获取数组的计数差异

获取核心数据中一对多关系的计数