Ho il seguente classe che eredita da NSManagedObject
:errore con Swift e Core Data: errore fatale: l'uso di initializer implementato 'init (entità: 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;
}
}
Quando creo istanze di esso, tutto funziona bene, ma quando faccio una ricerca di queste entità, ottengo un errore molto strano:
fatal error: use of unimplemented initializer 'init(entity:insertIntoManagedObjectContext:)'
Questo è il codice che causa l'errore:
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)
}
}
Ho scoperto che cambiare l'inizializzatore rendendolo più comodo e chiamare su sé invece che su super elimina il problema, ma non ho idea del perché.
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;
}
Il codice sopra funziona, ma non ho idea del perché. Qualcuno sa cosa sta succedendo? È un bug o è colpa mia?
Hai capito? Non ho la sensazione che la risposta dia una spiegazione adeguata. – kgaidis