41

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

与其获取 [[fetchedResultsController section] 计数],然后遍历每个部分以获取其计数,是否可以在一行中完成?

谢谢!

4

4 回答 4

113

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

[fetchedResultsController.fetchedObjects count]
于 2010-01-22T00:53:52.773 回答
15

这个怎么样?

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

这根本不会触及获取的对象,因此保证不会出错。

于 2013-09-05T19:40:05.997 回答
3

迅速。

fetchedResultsController.fetchedObjects?.count

于 2016-05-31T18:56:27.013 回答
1

斯威夫特 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 类的扩展无法在运行时访问该类的泛型参数

(请参阅如何在 Swift 4 中为 NSFetchedResultsController 编写扩展

于 2018-08-15T16:31:13.797 回答