如何在 NSManagedObjectContext 上正确调用 fetch()?

Posted

技术标签:

【中文标题】如何在 NSManagedObjectContext 上正确调用 fetch()?【英文标题】:How to properly call fetch() on NSManagedObjectContext? 【发布时间】:2017-03-09 16:18:20 【问题描述】:

我正在学习 CoreData。我一直在经历this tutorial,但在我的UIViewControllers 方法之一中遇到了编译问题。除非我犯了一个明显的错误,这正是教程中的代码所做的。我正在使用 Xcode 8.2.1。

func getStores() 
    guard let appDelegate =  UIApplication.shared.delegate as? AppDelegate else  return 
    let managedContext = appDelegate.persistentContainer.viewContext
    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Store")

    do 
      // Compilation error on the next line:
      // Cannot convert value of type 'NSFetchRequest<Store>' to expected argument type 'NSFetchRequest<NSFetchRequestResult>
      stores = try managedContext.fetch(fetchRequest)
     catch  
      // handle error
    
  

解决方案:

之前在我的 VC 中,我使用错误的 CoreData 实体声明了 stores 数组。修正这个错误解决了问题。

【问题讨论】:

如果 stores 定义为 [Store] 类型,那么您可能会与对 fetch 的调用不匹配,在您的情况下,我认为它的类型为 [NSManagedObject] - 什么是您收到的实际错误消息? 【参考方案1】:

换行

let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Store")

两者之一:

let fetchRequest: NSFetchRequest<NSFetchRequestResult> = Store.fetchRequest()

或者

let fetchRequest = NSFetchRequest<Store>(entityName: "Store")

【讨论】:

很奇怪。即使使用其中任何一个更改,我仍然会遇到相同的错误(screenshot @RobertJoseph 尝试清理构建项目,因为这对我来说非常有效。 我试过了。我什至从我的 DerivedData 文件夹中删除了该项目。一些奇怪的事情正在发生。谢谢您的帮助。我会将此标记为已解决,因为我确定您是正确的。 @RobertJoseph 欢迎朋友 :)

以上是关于如何在 NSManagedObjectContext 上正确调用 fetch()?的主要内容,如果未能解决你的问题,请参考以下文章

在 macOS 中初始化 CoreData

为啥我的核心数据保存缓慢?

如何在图像中找到明亮区域(以及如何在图像中找到阴影区域)

在QGIS中如何添加天地图的WMTS

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?