Mam następujące klasy, która dziedziczy NSManagedObject
:Błąd Swift i danych Core: błąd krytyczny: wykorzystanie ZAIMPLEMENTOWANE inicjatora 'init (jednostka: insertIntoManagedObjectContext :)'
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;
}
}
Kiedy tworzyć instancje niego wszystko działa poprawnie, ale kiedy robię poszukiwania tych podmiotów, mam bardzo dziwny błąd:
fatal error: use of unimplemented initializer 'init(entity:insertIntoManagedObjectContext:)'
jest to kod, który powoduje błąd:
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)
}
}
Dowiedziałem się, że zmiana inicjalizatora, czyniąc go wygodnym i wzywaniem siebie zamiast na super pozbywa się problemu, ale nie mam pojęcia dlaczego.
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;
}
Powyższy kod działa, ale nie mam pojęcia, dlaczego. Ktoś wie, co się dzieje? Czy to błąd, czy moja wina?
Czy to wymyśliłeś? Nie wydaje mi się, żeby ta odpowiedź była właściwym wyjaśnieniem. – kgaidis