CoreData question: -[NSManagedObject setValue:]: unrecognized sélecteur envoyé à l'instance
J'ai commencé avec CoreData hier, et je suis fou 🙁 j'ai créé un projet qui utilise CoreData (coché la case utiliser CoreData). Créé les entités, et puis il a créé l'NSManagedObject classes pour toutes les entités (je suppose qu'ils ont créer le "setter" et de "getter" les méthodes pour les entités).
Maintenant, j' #importé l'ensemble de ces classes dans mon AppDeletegate et écrit cela dans mon applicationDidFinishLaunching méthode:
(Abonnements est l'une des Entités de l'application)
NSManagedObjectContext *context = [self managedObjectContext];
Subscriptions *sbs = (Subscriptions *)[NSEntityDescription insertNewObjectForEntityForName:@"Subscriptions" inManagedObjectContext:context];
[sbs setTitle:@"OK"];
[sbs setType:@"Tag"];
[sbs setCode:@"cars"];
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Couldn't create the subscription");
}
Lorsque je l'exécute, j'ai cette erreur
[NSManagedObject setTitle:]: unrecognized sélecteur envoyé à l'instance 0x6160550
Je n'ai aucune idée de pourquoi cela se passe. S'Il Vous Plaît Aider!!!
Merci d'avance à tout le monde!
L'ajout de l'en-tête des Abonnements
Les abonnements.h
@interface Abonnements : NSManagedObject {
}
@property (nonatomic, retain) NSString * Type;
@property (nonatomic, retain) NSDecimalNumber * Lire;
@property (nonatomic, retain) NSString * Titre;
@property (nonatomic, retain) NSString * Code;
@property (nonatomic, retain) NSDecimalNumber * Nouveau;
@fin
Je n'ai pas changer quoi que ce soit. C'est juste que Xcode créé il.
- Avez-vous jamais comprendre cela? Je vais avoir un problème similaire. Tout message que j'envoie à mon NSManagedObject sous-classe dit non reconnu "sélecteur".
- Il a été un moment, je ne me souviens pas vraiment comment je l'ai corrigé. Désolé.
- quiconque de tomber sur ce problème). De vérifier la réponse de b123400. M'a aidé. J'avais oublié de changer le nom de la classe dans le modèle de données dans un refactoring de l'entité nom de la classe.
Vous devez vous connecter pour publier un commentaire.
Juste pour rappeler que, ne pas utiliser de majuscule nom de la variable, il pourrait affecte les getters et setters ne fonctionne pas correctement.
Si vous avez généré votre NSManagedObject sous-classes à partir du modèle de données, tout va bien, même si c'est @dynamiques, les poseurs sont des être mis en œuvre par coredata, et parce qu'ils sont déjà mis en œuvre, vous ne devrait pas changer à synthétiser.
Au moins pour moi, coredata retourne objet vide après je change @dynamique de @synthétiser.
Et n'oubliez pas de mettre le nom de la classe dans le modèle de données:
J'ai été faire cela, et a fait un Propre sur le projet et qu'il fixe.
J'ai ajouté un attirbute à une Base de Données d'entité, et au lieu de re-création de la NSManagedObjectSubclass, j'ai essayé d'obtenir la fantaisie et l'ajouter manuellement les @property et @dynamique de la sous-classe existante.
Qui n'a pas fonctionné, j'ai donc re-créé la sous-classe par le biais de XCode, qui est quand j'ai commencé à avoir cette erreur ("non reconnu sélecteur envoyé exemple" quand la définition de la valeur de l'attribut).
Donc je créé une nouvelle version de la Base de Données Modèle via XCode, puis nettoyés, supprimés données dérivées, et puis re-créé le NSManagedObject sous-classe. Qui ont travaillé.
Il a probablement été la création d'un nouveau modèle de données et la nouvelle sous-classe fondée sur ce que, si je n'avait certainement pas besoin de nettoyer ou de supprimer des données dérivées...mais il ne fait pas de mal, non plus!
Deux problèmes possibles
Avez-vous des correspondants @bloc dynamique dans le .m de fichier pour ces propriétés et
Ne pas utiliser Capitalisés variation des propriétés, des conventions de codage sont que les propriétés sont minuscules pour la première lettre, au moins, de sorte que lorsque le compilateur synthétise les méthodes.
@property (nonatomic, retain) NSString * type;
dans .het
@dynamic type;
dans .mdevient quelque chose comme
en arrière-plan. Si vous ne pouvez pas voir que le code jamais.
Cas conventions sont à vous, mais Chameau Caps est nominalement normal avec le Cacao. Mais son beaucoup comme un objet tel qu'
Big Furry Cat
devientbigFurryCat
. Suivez le style d'apple exemples.MODIFIER - modification @synthétiser à @dynamique
J'ai découvert qu'en ayant des relations d'entités que j'avais à faire sûr que certains de mes relations seraient à-plusieurs, j'ai pris une capture d'écran afin que vous puissiez voir ce que je veux dire, un à plusieurs, la relation est indiqué par la double flèche
Me ressemble Titre de l'attribut ne peut pas être réglé à la chaîne. Avez-vous vérifier?
Habituellement, non reconnu sélecteur envoyé à l'instance est une erreur d'exécution en cause par l'envoi d'un message à un objet que l'objet ne sait pas comment gérer.
Espérer que l'aide
J'ai fait simple projet ici.
setTitle:
syntaxe ne doit pas travailler.J'ai eu le même problème et j'ai trouvé une solution élégante. Il semble que
crée une ancienne version de
myEntity
qui n'ont pas les attributs de la plus up-to-date de la version. J'ai donc changé le nom demyEntity
dans l'ancienne version du modèlemyEntityOld
et je n'ai pas d'erreur, pas plus.Je soupçonne qu'il y est une manière élégante de faire la même chose dans XCode par la définition d'une propriété de
NSManagedObject
ouNSEntityDescription
.prendre les mesures suivantes
1) créé une nouvelle version de la Base de Données Modèle via Xcode.
2) Fixer la relation (ajout d'une nouvelle relation entre les deux.
)
La Création D'Objet Géré Les Relations
3) re-créé le NSManagedObject sous-classe