2016-02-27 66 views
0

我真的一直停留在這個問題上,我都提到this計算器後,但我的應用程序仍與問題崩潰了:無法調用指定的初始化上NSManagedObject類 - CoreData

沒有打電話指定的初始化對NSManagedObject類

所以,我有多個實體,我已經子類NSManagedObject。讓我們假裝我有一個實體:FirstEntity, SecondEntity, ThirdEntity, Fourth Entity, FifthEntity.讓我們假裝在每個實體中有兩個屬性firstAttribute, secondAttribute。我進入xcdatamold打開編輯器,然後爲我的所有實體選擇創建NSManagedObject子類。然後我想實例化這些新的NSManagedObject子類,以便我可以訪問FirstEntity中的屬性。所以我寫了這個代碼:

let firstEntity = FirstEntity() 

然後當我運行它崩潰的應用程序,所以我從計算器後暗示進一步編輯它,現在這是我的代碼:

let firstEntityName = NSEntityDescription.entityForName("FirstEntity", inManagedObjectContext: managedObject) 

let firstEntity = FirstEntity.init(entity: firstEntity!, insertIntoManagedObjectContext: managedObject) 

然而,我的代碼仍然崩潰。我真的無能爲力,因爲所有與上述問題有關的堆棧溢出帖子都說了,但我的代碼是仍然一起崩潰無法在NSManagedObject類上調用指定初始化程序錯誤。

有什麼建議嗎?

回答

3

您不應該通過初始化程序自己創建託管對象。相反,您可以調用NSEntityDescription的insertNewObjectForEntityForName:inManagedObjectContext:函數。沿線:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) 

上面設置firstEntity作爲NSManagedObject的一個實例。假設你已經創建了通過界面生成器FirstEntity子類NSManagedObject的,你可以改用:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity 
firstEntity.firstAttribute = // Whatever 
+0

嗨,謝謝你的迴應。如果我出於某種原因這樣做,代碼'firstEntity.firstAttribute'將不起作用。我將如何使用您的代碼引用每個實體中的屬性? – Harish

+0

太棒了,它工作:)。 – Harish

0

最簡單的方法是這樣的:

  • 在applicationDelegate定義範圍內的參考
  • 實例化通過傳遞變量的變量

在AppDelegate中(方括號外):

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
let context = appDelegate.persistentContainer.viewContext 

並在代碼:

let firstEntity = FirstEntity(context:context) 

現在,你有你的實體創建。但不要忘記保存:

appDelegate.saveContext() 
相關問題