web-dev-qa-db-ja.com

Core DataNSFetchedResultsController-返されたレコードの総数

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

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

ありがとう!

40
Neal L

この行は、フェッチされたオブジェクトの総数を返します。

[fetchedResultsController.fetchedObjects count]
111
gerry3

これはどう?

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

これはフェッチされたオブジェクトにまったく触れないので、それらに障害が発生しないことが保証されています。

15
Max Desiatov

迅速。

fetchedResultsController.fetchedObjects?.count

3
jstn

スウィフト4:

Swift拡張子としてのMaxDesiatovの提案:

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 でNSFe​​tchedResultsControllerの拡張機能を作成する方法)を参照してください)

0
Bill Feth