Swift CoreData: erreur: Échec de l'appel désigné initialiseur sur NSManagedObject de la classe de NSManagedObject'
Je suis une utilisation de base de données pour enregistrer une catégorie dans vc1 et souhaitez ajouter des propriétés de la liste pour une liste dans vc2. Mon modèle de données est une catégorie à de nombreuses propriétés de la liste.
Je suis en ajoutant la catégorie de ce genre dans vc1:
func createNewCategory() {
var category: NSManagedObject! = NSEntityDescription.insertNewObjectForEntityForName("Category", inManagedObjectContext: self.context) as NSManagedObject
category.setValue(self.categoryTextField.text, forKey: "name")
var error: NSError? = nil
self.context.save(&error)
}
Réglage des données dans vc2:
func setupCoreData() {
var appDelegate: AppDelegate = (UIApplication.sharedApplication()).delegate as AppDelegate
self.context = appDelegate.managedObjectContext!
var request: NSFetchRequest = NSFetchRequest(entityName: "Category")
if (self.context.executeFetchRequest(request, error: nil)) {
var error: NSError? = nil
self.listData = self.context.executeFetchRequest(request, error: &error)
self.managedObject = self.listData.objectAtIndex(0) as NSManagedObject
}
}
Il se bloque sur la dernière ligne: self.managedObject = ...
disant:
CoreData: error: Failed to call designated initializer on NSManagedObject class 'NSManagedObject'
L'objet géré est dans le tableau si j'ai mis un point de rupture et imprimer le tableau. Quel est le problème?
Vous êtes l'exécution de la demande de récupération à deux reprises. Pourquoi?
J'ai été vérifier si elle a existé, mais il semblait fonctionner sans elle...
Le test vérifie juste si le fetch renvoie un tableau, même vide.
Ok, bon à savoir. Je suis un novice comme vous pouvez le dire 🙂 Merci pour votre aide.
J'ai été vérifier si elle a existé, mais il semblait fonctionner sans elle...
Le test vérifie juste si le fetch renvoie un tableau, même vide.
Ok, bon à savoir. Je suis un novice comme vous pouvez le dire 🙂 Merci pour votre aide.
OriginalL'auteur Johannes Olsson | 2014-08-26
Vous devez vous connecter pour publier un commentaire.
Dédié initialiseur est
Clairement, vous n'êtes pas l'insertion d'un nouvel objet, si vous voulez vraiment une valeur facultative. Peut-être avez-vous déclaré votre variable de classe
managedObject
commeNSManagedObject!
? Essayez deNSManagedObject?
et aussi l'opérateuras?
.OriginalL'auteur Mundi
Une entité dans CoreData est équivalent à une classe. Avez-vous ajouter à l'entité de votre modèle d'objet managé, et une sous-classe de l'entité? (Consultez la guide de programmation pour plus d'arrière-plan.)
OriginalL'auteur