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!

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top