我有以下类继承自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)
自动继承。该机制确保name
在Child
类中正确初始化。
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] 删除。
我来说两句