2016-09-29 129 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 –