Dados principais nsfetchedResultScontroller - Número total de registros retornados
-
22-09-2019 - |
Pergunta
Estou usando um NSFetchedResultSController em um aplicativo para iPhone e estou me perguntando se existe uma maneira fácil de obter o número total de linhas retornadas em todas as seções.
Em vez de obter a contagem [[FetchedResultsController] e depois se enrolar em cada seção para obter sua contagem, pode ser feito em uma linha?
Obrigado!
Solução
Esta linha retorna o número total de objetos buscados:
[fetchedResultsController.fetchedObjects count]
Outras dicas
Que tal este?
[fetchedResultsController.sections.valueForKeyPath: @"@sum.numberOfObjects"];
Isso não tocará os objetos buscados, por isso é garantido que não culpá -los.
Rápido.
fetchedResultsController.fetchedObjects?.count
Swift 4:
A sugestão de Max Desiatov como uma extensão rápida:
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
}
}
Uso:
let objectCount = fetchedResultsController.fetchedObjectCount
Ou faça -o como uma rotina em linha:
// Avoid actually fetching objects. Just count them.
let objectCount = fetchedResultsController.sections?.reduce(0, { $0 + $1.numberOfObjects }) ?? 0
Note o @objc
é necessário para evitar esse erro de compilação:
A extensão de uma classe Genic Objective-C não pode acessar os parâmetros genéricos da classe em tempo de execução
(Ver Como escrever uma extensão para NSFetchedResultScontroller no Swift 4)