如何获得对持久存储中对象数量 return 的提取请求?
How do I get a fetch request to return the number of objects in the persistent store?
当我的应用程序启动并创建第一个视图控制器时,还会创建一个新的支持 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
中的项目
这也表明获取请求返回的是上下文中的项目计数,而不是持久存储。
如何获取持久存储中项目的真实数量?
谢谢
我还预计 fetchRequest.includesPendingChanges = false
会排除已插入上下文但未保存到存储中的对象。
但是,count(for: NSFetchRequest)
方法应该给出正确的计数。您可以找到 Apple 文档 here.
当我的应用程序启动并创建第一个视图控制器时,还会创建一个新的支持 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
这也表明获取请求返回的是上下文中的项目计数,而不是持久存储。
如何获取持久存储中项目的真实数量?
谢谢
我还预计 fetchRequest.includesPendingChanges = false
会排除已插入上下文但未保存到存储中的对象。
但是,count(for: NSFetchRequest)
方法应该给出正确的计数。您可以找到 Apple 文档 here.