当您知道没有保存实体时如何处理 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 好的,那么你可以删除 trycatch 块,这是不必要的【参考方案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

当 UI 允许新对象时如何处理取消

在电源查询中加载 CSV 时如何处理多个引号?