Swift 3/XCode 8 NSManagedObjectContext.fetch错误
问题描述:
我正在迁移到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>)
答
试试这个:
do {
objects = try managedObjectContext.fetch(fetchRequest) as! [YourEntityName]
} catch {
print(error)
}
感谢你为这个Karanveer。我被挂在错误信息上,并没有想到在我面前看到明显的铸造问题。 Bug报告已提交给Apple。 https://openradar.appspot.com/radar?id=5049582866137088 – dmorrow
@dmorrow好。还有其他的错误,比如布局问题。您可能需要更改Storyboard文件中的内容。就像在File Inspector中一样,您可能需要将选项从Xcode 8.0更改为Xcode 7.x –