2016-09-29 131 views
0

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

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

这将导致以下错误:

Cannot invoke 'fetch' with an argument list of type '(NSFetchRequest<NSFetchRequestResult>)' Expected an argument list of type '(NSFetchRequest<NSFetchRequestResult>)'

的误差,说明我不能使用它的期望类型。 在Swift 3中可以像这样抽象调用CoreData吗?

该帖子How to apply the type to a NSFetchRequest instance?是什么引领我到目前为止。

我试图投fetchRequest,但它没有改变任何东西。 managedObjectContext.fetch(fetchRequest as! NSFetchRequest<NSFetchRequestResult>)

回答

3

试试这个:

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

感谢你为这个Karanveer。我被挂在错误信息上,并没有想到在我面前看到明显的铸造问题。 Bug报告已提交给Apple。 https://openradar.appspot.com/radar?id=5049582866137088 – dmorrow

+0

@dmorrow好。还有其他的错误,比如布局问题。您可能需要更改Storyboard文件中的内容。就像在File Inspector中一样,您可能需要将选项从Xcode 8.0更改为Xcode 7.x –