【问题标题】:How do I get a fetch request to return the number of objects in the persistent store?如何获取获取请求以返回持久存储中的对象数量?
【发布时间】:2019-05-17 05:02:12
【问题描述】:

当我的应用程序启动并创建第一个视图控制器时,还会创建一个新的支持 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 中的项目进行计数

这也表明获取请求正在返回上下文中的项目计数,而不是持久存储。

如何获取持久存储中的真实项目数?

谢谢

【问题讨论】:

  • 我没有,但我现在做了,而且效果很好。谢谢!
  • @Willeke - 我认为解决方案的一小部分是相似的,但这就是相似之处的结束。您认为可能重复的线程已经存在 10 年了,它在 Objective-C 中,并且 OP 正在使用 NSFetchedResultsController 并要求一种更有效的方法来获取“计数实体”。我特别询问如何获取商店中实体的数量,而不是上下文。它也在 Swift 中,并且没有引入 NSFetchedResultsController 的复杂性。我认为我的问题将比旧帖子更能帮助有类似问题的人。
  • @pbasdf - 如果您将评论作为答案,我会接受。

标签: core-data nsmanagedobject nsmanagedobjectcontext nspersistentstore


【解决方案1】:

我还期望fetchRequest.includesPendingChanges = false 会排除已插入上下文但未保存到存储中的对象。

但是,count(for: NSFetchRequest) 方法应该给出正确的计数。您可以找到 Apple 文档here

【讨论】:

  • 您的第一段含糊不清。你能改写一下吗?你期待什么?你看见什么了? fetchRequest.includesPendingChanges = false 是否排除对象?
猜你喜欢
  • 2011-01-05
  • 2014-07-26
  • 1970-01-01
  • 2016-03-17
  • 2021-01-09
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多