首页 > 解决方案 > 如何计算属性中的记录?

问题描述

目前在 ios 中的核心数据有点挣扎,找不到在当前 Swift 版本中有效的答案。无论如何可以计算属性中的记录数吗?

let results = try managedContext.fetch(request)
print (results.count)

这只是给我实体中所有记录的结果,但我需要从单个属性中知道它。谢谢!

标签: iosswiftcore-data

解决方案


我建议您编辑您的问题,为我们提供更多信息。

在没有您提供更多信息的情况下,根据我试图解释您的问题的最佳猜测提供此答案。

一些基本的术语来帮忙。

Apple 文档指出,您...

通过将对象描述为实体、将它们的属性添加为属性和关系、最后生成相应的 NSManagedObject 子类来继承更改跟踪和生命周期管理来对数据进行建模。

我可以建议您的问题写成这样更有意义:

是否可以计算与某个属性的某个值匹配的记录数?

如果我的猜测是正确的,您可以使用以下代码,注意:

  • 确定的值是“要计数的属性值”;和
  • 该属性是“testAttribute”。

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "TestEntity")
    
    let key = "testAttribute"                // the entity attribute
    let value = "attribute value to count"   // the attribute value
    
    let predicate = NSPredicate(format: "%K == %@", argumentArray: [key, value])
    
    request.predicate = predicate
    request.resultType = .countResultType
    
    var results: Int = 0
    
    do {
    
        results = try context.count(for: request)
    }
    catch {
    
        let fetchError = error
        print(fetchError)
    }
    

通过指定NSFetchRequestResultTypeas .countResultType,您要求您的 fetch 请求仅计算与谓词匹配的指定实体的托管对象的数量(其中“testAttribute”=“要计数的属性值”)。

这是一个非常有效的获取。

不会将NSManagedObject托管对象提取到内存中(例如via数组var results: [NSManagedObject]?),

确实只将托管对象的数量提取到内存中(例如NSManagedObjectvia的数量var results: Int = 0)。


推荐阅读