41

iPhone アプリで NSFetchedResultsController を使用していますが、すべてのセクションで返される行の総数を取得する簡単な方法があるかどうか疑問に思っています。

[[fetchedResultsController セクション] カウント] を取得し、各セクションをループしてそのカウントを取得する代わりに、1 行で実行できますか?

ありがとう!

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:

Swift 拡張機能としての Max Desiatov の提案:

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 に答える