Базовые данные NSFetchedResultsController - общее количество возвращенных записей - PullRequest
40 голосов
/ 22 января 2010

Я использую NSFetchedResultsController в приложении для iPhone, и мне интересно, есть ли какой-нибудь простой способ получить общее количество строк, возвращаемых во всех разделах.

Вместо того, чтобы получать счетчик [[fetchedResultsController]] и затем циклически проходить через каждый раздел, чтобы получить его счет, можно ли это сделать в одну строку?

Спасибо!

Ответы [ 4 ]

111 голосов
/ 22 января 2010

Эта строка возвращает общее количество выбранных объектов:

[fetchedResultsController.fetchedObjects count]
14 голосов
/ 05 сентября 2013

Как насчет этого?

[fetchedResultsController.sections.valueForKeyPath: @"@sum.numberOfObjects"];

Это никак не повлияет на извлеченные объекты, поэтому гарантированно не будет в них ошибаться.

3 голосов
/ 31 мая 2016

Swift.

fetchedResultsController.fetchedObjects?.count

0 голосов
/ 15 августа 2018

Swift 4:

Предложение Макса Десятова как расширение 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 не может получить доступ к универсальным параметрам класса во время выполнения

(См. Как написать расширение для NSFetchedResultsController в Swift 4 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...