当您知道没有保存实体时如何处理 CoreData 中的获取请求
Posted
技术标签:
【中文标题】当您知道没有保存实体时如何处理 CoreData 中的获取请求【英文标题】:How to handle fetch requests in CoreData when you know there are no Entities saved 【发布时间】:2015-12-28 06:34:56 【问题描述】:我有一个应用程序,我知道它在第一次运行时不会保存在 CoreData 中。我正在尝试检查这种情况:
让 fetchRequest = NSFetchRequest(entityName: "Person")
let error = NSErrorPointer()
do
let fetchResults = (try! coreDataStack.context.countForFetchRequest(fetchRequest, error: error))
print("Count \(fetchResults)")
catch let error as NSError
print("Fetch failed: \(error.localizedDescription)")
我收到一条警告说“从“Int”转换为不相关的类型“[Person]”总是失败。
我只是不确定我错过了什么。我确信检查 CoreData 中的任何实体是一种常见的做法。
【问题讨论】:
以上语法是 Swift 1.2 的,你用的是 Swift 1.2 还是 2?因为countForFetchRequest
需要绑定在try & catch
下。
【参考方案1】:
您无需将其转换为[Entity]
,因为countForFetchRequest
返回计数。所以,你需要在不强制转换的情况下调用。
let fetchResults = coreDataStack.context.countForFetchRequest(fetchRequest, error: error)
print("Count \(fetchResults)")
【讨论】:
我更新了问题中的代码,但仍然收到 2 个警告以及崩溃“致命错误:在展开可选值时意外发现 nil。 警告是:“在'try'表达式中没有调用抛出函数,并且'catch'块无法访问,因为'do'块中没有抛出错误 @icekomo 好的,那么你可以删除try
和 catch
块,这是不必要的【参考方案2】:
我能够使用此代码使 countForFetchRequest 工作:` let fetchRequest = NSFetchRequest(entityName: "Person")
var error: NSError?
let count = coreDataStack.context.countForFetchRequest(fetchRequest, error: &error)
if count != NSNotFound
print("Count \(count)")
else
print("Could not fetch \(error), \(error?.userInfo)")
`
【讨论】:
以上是关于当您知道没有保存实体时如何处理 CoreData 中的获取请求的主要内容,如果未能解决你的问题,请参考以下文章
iPhone iOS在呈现图表时如何处理Core Data中的时间间隔?
当您在 iOS 应用程序和服务器中都使用令牌时如何处理 Facebook 弃用的离线访问权限
当商店位置相同时如何处理 NSPersistentStoreCoordinatorStoresWillChangeNotification