【问题标题】:Swift 3/XCode 8 NSManagedObjectContext.fetch errorSwift 3/XCode 8 NSManagedObjectContext.fetch 错误
【发布时间】:2017-02-08 08:13:42
【问题描述】:

我正在迁移到 Swift 3,并且在迁移抽象 CoreData 查询代码时遇到了一个非常奇怪的错误消息。 entityName 被传递给以下方法:

func objects(entityName name:String)->[NSManagedObject]? {   
  let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName:name)
  var objects: [NSManagedObject]?
  do {
    objects = try managedObjectContext.fetch(fetchRequest)
  } catch { ... }
}

这会导致以下错误:

无法使用“(NSFetchRequest)”类型的参数列表调用“fetch” 需要一个类型为“(NSFetchRequest)”的参数列表

错误是说我不能使用它所期望的类型。 是否可以在 Swift 3 中像这样对 CoreData 进行抽象调用?

How to apply the type to a NSFetchRequest instance? 的帖子让我走到了这一步。

我尝试投射fetchRequest,但它并没有改变任何东西。 managedObjectContext.fetch(fetchRequest as! NSFetchRequest&lt;NSFetchRequestResult&gt;)

【问题讨论】:

    标签: ios swift core-data swift3 xcode8


    【解决方案1】:

    试试这个:

    do {
        objects = try managedObjectContext.fetch(fetchRequest) as! [YourEntityName]
      } catch {
      print(error)
    }
    

    【讨论】:

    • 感谢卡兰维尔。我被错误消息挂断了,没想到要看看我面前明显的选角问题。错误报告已提交给 Apple。 openradar.appspot.com/radar?id=5049582866137088
    • @dmorrow 好。还有其他错误,例如布局问题。您可能需要更改 Storyboard 文件中的某些内容。就像在 File Inspector 中一样,您可能需要将选项从 Xcode 8.0 更改为 Xcode 7.x
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多