我在iPhone应用程序中使用NSFetchedResultsController,我想知道是否有一些简单的方法可以获得所有部分返回的总行数。
不是让[[fetchedResultsController sections]计数]然后循环遍历每个部分来计算它,它可以在一行中完成吗?
谢谢!
答案 0 :(得分:111)
此行返回已获取对象的总数:
[fetchedResultsController.fetchedObjects count]
答案 1 :(得分:14)
这个怎么样?
[fetchedResultsController.sections.valueForKeyPath: @"@sum.numberOfObjects"];
这根本不会触及所取出的物体,所以保证不会对它们造成错误。
答案 2 :(得分:3)
夫特。
#{quorum}
答案 3 :(得分:0)
迅速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类的扩展无法在运行时访问该类的通用参数
(请参见How to write an extension for NSFetchedResultsController in Swift 4)