代码之家  ›  专栏  ›  技术社区  ›  Jim

如何获得获取请求以返回持久存储中的对象数?

  •  1
  • Jim  · 技术社区  · 6 年前

    当我的应用程序启动并创建第一个视图控制器时,也会创建一个新的支持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

    这还表明fetch请求返回的是上下文中的项目数,而不是持久存储。

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

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   pbasdf    6 年前

    我也希望 fetchRequest.includesPendingChanges = false 将排除已插入上下文但未保存到存储区的对象。

    然而, count(for: NSFetchRequest) 方法应给出正确的计数。你可以找到苹果的文档 here .