2014-10-28 107 views
6

Xcode 6有大量的錯誤。但我不太確定這是否是一個錯誤。這可能不是,因爲這是我現在正在學習的東西。無法實例化NSManagedObject的子類

我的問題是,任何時候我嘗試實例我NSManagedObject的子類,我不必通過entity: NSEntityDescriptionNSManagedContext: insertIntoManagedContext參數構造函數的選項,Xcode中說:「額外的參數‘實體’呼叫」

我從頭開始創建一個新的Xcode項目,只是爲了看看我是否可以在一個更小,最小的項目中重新創建問題。

ToDoList.Item在數據模型檢查器中設置爲Item實體類。

下面的代碼:

override func viewDidLoad() { 

    super.viewDidLoad() 

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context: NSManagedObjectContext = appDel.managedObjectContext! 

    let ent = NSEntityDescription.entityForName("Item", inManagedObjectContext: context)! 

    //compiler complains here 
    var item = Item(entity: ent, insertIntoManagedObjectContext: context)! 

} 

這裏的子類:

import UIKit 
import CoreData 

class Item: NSManagedObject { 

    @NSManaged var title: String 
    @NSManaged var completed: Bool 

} 

所有幫助表示讚賞。

回答

5

在同樣的問題時只需傳來:Init method for core data entity not available

很顯然,我們必須實現我們自定義的NSManagedObject類

init(entity: NSEntityDescription, insertIntoManagedObjectContext context, NSManagedObjectContext?) 

方法。因此,只需將

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
    super.init(entity: entity, insertIntoManagedObjectContext: context) 
} 

添加到您的實體類中,它將起作用。

+0

這在最近的SDK版本中必須要求。我在YouTube上看到過M2KDev沒有它。 – 2014-10-31 19:50:31

1

嘗試不感嘆號的最後一行,就像這樣:

var item = Item(entity: ent, insertIntoManagedObjectContext: context) 

,也許你還沒有加入您的應用程序名稱,類名:

雨燕類的命名空間 - 他們作用域到它們編譯的模塊(通常是項目)。要將NSManagedObject類的Swift子類與Core Data模型一起使用,請在模型實體檢查器的Class字段中將類名稱作爲模塊名稱的前綴。

Class name https://developer.apple.com/library/mac/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html

+0

我上面說過......「ToDoList.Item在數據模型檢查器中設置爲Item實體類。」 ToDoList是項目名稱。刪除感嘆號會引發錯誤。儘管感謝您的意見 – 2014-10-31 19:47:32

相關問題