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