IPhoneアプリでNSFetchedResultsControllerを使用していますが、すべてのセクションで返される行の総数を取得する簡単な方法があるかどうか疑問に思っています。
[[fetchedResultsControllersections]カウント]を取得してから各セクションをループしてカウントを取得する代わりに、1行で実行できますか?
ありがとう!
この行は、フェッチされたオブジェクトの総数を返します。
[fetchedResultsController.fetchedObjects count]
これはどう?
[fetchedResultsController.sections.valueForKeyPath: @"@sum.numberOfObjects"];
これはフェッチされたオブジェクトにまったく触れないので、それらに障害が発生しないことが保証されています。
迅速。
fetchedResultsController.fetchedObjects?.count
スウィフト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 でNSFetchedResultsControllerの拡張機能を作成する方法)を参照してください)