Как получить запрос на выборку, чтобы вернуть количество объектов в постоянном хранилище?

Когда мое приложение запускается и создается первый контроллер представления, также создается новый резервный объект NSManagedObject. На этом этапе я НЕ сохранил контекст (и начал со свежего, пустого постоянного хранилища).

Пользователь может перейти на другой экран, на котором будет отображаться сообщение, если сохраненных элементов нет, или, если сохраненные элементы существуют, отобразится список элементов. Вот как я проверяю сохраненные элементы:

func checkForSavedItems() -> Bool {
    var itemsDoExist = false
    let fetchRequest = NSFetchRequest<NSNumber>(entityName: "Items")
    fetchRequest.includesPendingChanges = false
    fetchRequest.resultType = .countResultType

    do {
        let countResult = try context.fetch(fetchRequest)
        itemsDoExist = countResult.first!.intValue > 0
    } catch let error {
        print(error)
    }
    return itemsDoExist
}

Я ожидал, что fetchRequest.includesPendingChanges = false гарантировал бы, что новый объект, который не был сохранен, не будет засчитан, но это так. Счетчик возвращается как 1, поэтому он должен подсчитывать элементы в NSManagedObjectContext

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

Как мне получить реальное количество товаров в постоянном магазине?

Спасибо


person Jim    schedule 16.12.2018    source источник
comment
Вы пробовали count(for: NSFetchRequest)?   -  person pbasdf    schedule 17.12.2018
comment
У меня не было, но я сделал это сейчас, и это сработало. Спасибо!   -  person Jim    schedule 17.12.2018
comment
@Willeke - я думаю, что небольшая часть решения похожа, но на этом сходство заканчивается. Поток, который, по вашему мнению, может быть дубликатом, существует уже 10 лет, он находится в Objective-C, а OP работал с NSFetchedResultsController и просил более эффективный способ получить «подсчет сущностей». Я специально спрашиваю, как получить количество сущностей в магазине, а не контекст. Он также в Swift и не представляет сложности NSFetchedResultsController. Я думаю, что мой вопрос поможет людям с подобным вопросом больше, чем этот старый пост.   -  person Jim    schedule 17.12.2018
comment
@pbasdf - Если вы сделаете свой комментарий ответом, я его приму.   -  person Jim    schedule 17.12.2018
comment
См. stackoverflow.com/a/43393288/4244136   -  person Willeke    schedule 17.12.2018


Ответы (1)


Я также ожидал, что fetchRequest.includesPendingChanges = false исключит объекты, которые были вставлены в контекст, но не сохранены в магазине.

Однако метод count(for: NSFetchRequest) должен давать правильный счет. Вы можете найти документацию Apple здесь.

person pbasdf    schedule 18.12.2018
comment
ваш первый абзац расплывчатый. Вы можете это перефразировать? Что вы ожидали? Что ты видел? fetchRequest.includesPendingChanges = false исключает объекты? - person Honey; 22.12.2018