无法实例化NSManagedObject的子类

问题描述:

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 

} 

所有帮助表示赞赏。

在同样的问题时只需传来: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

是在Swift中继承的构造函数吗?

我会尝试使用NSEntityDescription.insertNewObjectForEntityForName:inManagedObjectContext

+0

看起来这将需要在我的工作。但我已经看到它通过子类来完成。 – 2014-10-28 03:14:25

尝试不感叹号的最后一行,就像这样:

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

,也许你还没有加入您的应用程序名称,类名:

雨燕类的命名空间 - 他们作用域到它们编译的模块(通常是项目)。要将NSManagedObject类的Swift子类与Core Data模型一起使用,请在模型实体检查器的Class字段中将类名称作为模块名称的前缀。

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

+0

我上面说过......“ToDoList.Item在数据模型检查器中设置为Item实体类。” ToDoList是项目名称。删除感叹号会引发错误。尽管感谢您的意见 – 2014-10-31 19:47:32