无法实例化NSManagedObject的子类

时间:2014-10-28 01:36:04

标签: ios xcode core-data swift nsmanagedobject

Xcode 6有很多错误。但我不确定这是不是一个错误。可能不是因为这是我刚刚学习的东西。

我的问题是,每当我尝试实例化我的NSManagedObject的子类时,我都没有将entity: NSEntityDescriptionNSManagedContext: insertIntoManagedContext参数传递给构造函数的选项,Xcode说" Extra论证'实体'在电话"

我从头开始创建一个新的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

}

感谢所有帮助。

3 个答案:

答案 0 :(得分:6)

遇到同样的问题: Init method for core data entity not available

显然我们必须实施

init(entity: NSEntityDescription, insertIntoManagedObjectContext context, NSManagedObjectContext?)
我们的自定义NSManagedObject类中的

方法。所以只需添加

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

到您的实体类,它将起作用。

答案 1 :(得分:1)

尝试不带感叹号的最后一行,如下所示:

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

也许您还没有将您的应用名称添加到班级名称中:

  

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

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

答案 2 :(得分:0)

构造函数是否在Swift中继承?

我尝试使用NSEntityDescription.insertNewObjectForEntityForName:inManagedObjectContext