Swift和Core Data错误:致命错误:使用未实现的初始化程序'init(entity:insertIntoManagedObjectContext :)'

菲舍尔

我有以下类继承自NSManagedObject

import Foundation
import CoreData


class Note: NSManagedObject {



    @NSManaged var text: String
    @NSManaged var name: String


     init(name: String, text:String, context: NSManagedObjectContext){

        let entity = NSEntityDescription.entityForName("Note", inManagedObjectContext: context);
        super.init(entity: entity!, insertIntoManagedObjectContext: context)

        self.text = text
        self.name = name;

    }
}

当我创建它的实例时,一切正常,但是当我搜索这些实体时,我得到一个非常奇怪的错误:

fatal error: use of unimplemented initializer 'init(entity:insertIntoManagedObjectContext:)'

这是导致错误的代码:

func coreDatePlayground(){

    var note = Note(name: "A new note", text: "blah", context: self.managedObjectContext!)

    println("\(note.name)  \(note.text)")

    var noote2 = Note(name: "Another note", text: "blah blah", context: self.managedObjectContext!)


    managedObjectContext?.save(nil)

    var fetch = NSFetchRequest(entityName: "Note")
    // This line causes the crash.
    var results = self.managedObjectContext?.executeFetchRequest(fetch, error: nil)
    if let objects = results{
        println(objects.count)
    }

}

我发现,通过使初始化程序变得更加方便并调用self而不是super来更改初始化程序可以摆脱此问题,但是我不知道为什么。

 convenience init(name: String, text:String, context: NSManagedObjectContext){

    let entity = NSEntityDescription.entityForName("Note", inManagedObjectContext: context);
    self.init(entity: entity!, insertIntoManagedObjectContext: context)

    self.text = text
    self.name = name;

}

上面的代码有效,但是我不知道为什么。有人知道发生了什么吗?是错误还是我的错?

林太郎

这是记录的行为。

Swift子类默认不会继承其超类初始化器

例如,以下代码甚至不会编译,因为Child它不会init(id:String)自动继承该机制确保nameChild类中正确初始化。

class Parent {
    var id:String
    init(id:String) {
        self.id = id
    }
}

class Child:Parent {
    var name:String
    init(id:String, name:String) {
        self.name = name
        super.init(id: id)
    }
}

var child1 = Child(id:"child1")

如果仅convenience在子类中定义初始化器,则它将自动继承其所有超类指定的初始化器,如“自动初始化器继承”部分所述

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章