核心数据NSFetchedResultsController - 返回的记录总数

时间:2010-01-22 00:51:16

标签: iphone core-data nsfetchedresultscontroller

我在iPhone应用程序中使用NSFetchedResultsController,我想知道是否有一些简单的方法可以获得所有部分返回的总行数。

不是让[[fetchedResultsController sections]计数]然后循环遍历每个部分来计算它,它可以在一行中完成吗?

谢谢!

4 个答案:

答案 0 :(得分:111)

此行返回已获取对象的总数:

[fetchedResultsController.fetchedObjects count]

答案 1 :(得分:14)

这个怎么样?

[fetchedResultsController.sections.valueForKeyPath: @"@sum.numberOfObjects"];

这根本不会触及所取出的物体,所以保证不会对它们造成错误。

答案 2 :(得分:3)

夫特。

#{quorum}

答案 3 :(得分:0)

迅速4:

Max Desiatov建议使用Swift扩展:

import Foundation
import CoreData

extension NSFetchedResultsController {

    @objc var fetchedObjectsCount: Int {
        // Avoid actually fetching the objects. Just count them. Why is there no API like this on NSFetchResultsController?
        let count = sections?.reduce(0, { (sum, sectionInfo) -> Int in
            return sum + sectionInfo.numberOfObjects
        }) ?? 0
        return count
    }
}

用法:

let objectCount = fetchedResultsController.fetchedObjectCount

或者作为内联例程来完成:

// Avoid actually fetching objects. Just count them.
let objectCount = fetchedResultsController.sections?.reduce(0, { $0 + $1.numberOfObjects }) ?? 0

注意:需要@objc才能避免此编译错误:

  

通用Objective-C类的扩展无法在运行时访问该类的通用参数

(请参见How to write an extension for NSFetchedResultsController in Swift 4