2016-01-10 46 views
0

我在使用Core Data對象獲取數據時遇到問題。Swift CoreData:無法調用NSManagedObject上的指定初始化程序

這是一個用於讀取數據

let fetchRequest = NSFetchRequest(entityName: "Country") 

     var countries = [Country!]() 

     do { 
      countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country!] 
     } catch { 
      // Replace this implementation with code to handle the error appropriately. 
      // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
      let nserror = error as NSError 
      NSLog("Unresolved error \(nserror), \(nserror.userInfo)") 
      abort() 
     } 

代碼這是模型定義

import Foundation 
import CoreData 

@objc(Country) 
class Country: NSManagedObject 
{ 

..... 
} 

這是模型的擴展

import Foundation 
import CoreData 

extension Country { 

    @NSManaged var countryCode: String? 
    @NSManaged var dialCode: String? 
    @NSManaged var name: String? 

} 

我收到以下錯誤:

CoreData: error: Failed to call designated initializer on NSManagedObject class 'Country' 
fatal error: unexpectedly found nil while unwrapping an Optional value 

這是打破在這條線:

countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country!] 

我不知道,我明白這是問題。有人可以建議嗎?

謝謝!

+0

這可能是因爲某個地方你有沿線'VAR myObject的=國家變量聲明的具體初始化() '。這不僅僅聲明變量,它還使用默認的初始化程序('init')創建一個實例,而NSManagedObjects(和子類)必須使用指定的初始化程序:'initWithEntity:insertIntoManagedObjectContext:'來初始化。聲明它,而不是'var myObject:Country' – pbasdf

回答

0

只是分別除去感嘆號在這兩行

var countries = [Country]() 

countries = try self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [Country] 

NSManagedObject對象可以被用作非可選的。

隱含展開可選類型(帶感嘆號)迫使對象調用它必須是initWithEntity:insertIntoManagedObjectContext:

+0

感謝您的迴應。但在刪除這兩行的感嘆號之後,我又得到了同樣的錯誤: 'CoreData:錯誤:無法在NSManagedObject類'國家'上調用指定的初始值設定項' 致命錯誤:意外地發現零,同時展開一個可選值 ' – bla0009

+0

你在'Country'中實現了'init()'方法嗎? – vadian

+0

不,我應該實現一些特殊的'init()'方法嗎?或者擴展現有的方法'initWithEntity'?謝謝! – bla0009

相關問題