2009-10-12 7 views
2

J'ai une sous-classe NSManagedObject, créée par l'interface du modèle XCode.
Cette classe a des membres NSString et NSNumber et un membre NSDate.Cocoa-Touch, NSManagedObject: Exception lors de la définition d'une propriété

Lorsque je tente de définir le membre NSDate, je reçois l'exception suivante:
2009-10-12 21:53:32.228 xxx[2435:20b] Failed to call designated initializer on NSManagedObject class 'Item'
2009-10-12 21:53:32.228 xxx[2435:20b] *** -[Item setDate:]: unrecognized selector sent to instance 0x3f7ed30
2009-10-12 21:53:32.229 xxx[2435:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[Item setDate:]: unrecognized selector sent to instance 0x3f7ed30'

Le paramètre de date est comme les autres, sauf qu'au lieu d'être un

@property (nonatomic, retain) NS{String,Number}* propname; 

c'est un

@property (nonatomic, retain) NSDate *date; 

BTW, l'instance Item j'assignant sur est juste un 01 régulier, aucun contexte associé ou quoi que ce soit. D'abord je pensais que mon NSDate * était défectueux, alors j'ai essayé de l'assigner [date NSDate], et même zéro. Il se bloque toujours.

Des idées?

+0

Que signifie cette notation "NS {String, Number}"? –

+1

@ValeryPavlov c'est de bash, il se développe à NSString et NSNumber. Ne fonctionne pas dans ObjC, c'est juste plus rapide à taper de cette façon. Par exemple. L'exemple {1,2,3} se développe en exemple1, exemple2, exemple3. – Prody

Répondre

9

Vous ne pouvez pas instancier une sous-classe NSManagedObject sans associé NSManagedObjectContext (bien que vous pouvez que vous avez montré, mais les résultats seront presque certainement pas ce que vous voulez).

La première ligne des notes de journal à ceci:

2009-10-12 21:53:32.228 xxx[2435:20b] Failed to call designated initializer on NSManagedObject class 'Item' 

Toutes les classes Objective-C ont (par convention) un initialiseur désigné , qui est la méthode d'initialisation qui doit être appelé, que ce soit explicitement ou via un autre initialiseur de commodité. Dans le cas de NSManagedObject, il s'agit de -[NSManagedObject initWithEntity:insertIntoManagedObjectContext:]. Le fait de ne pas provoquer l'initialiseur désigné conduit à un comportement indéfini, et probablement incorrect, car l'initialisation de l'instance n'est pas garantie. Je suppose que l'initialiseur NSManagedObject configure la machine pour prendre en charge l'accès aux propriétés @synthesize 'd pour les attributs de l'entité. Sans cette machine, l'instance peut ne pas penser qu'elle peut répondre aux appels @synthesize 'd et votre appel au setData: provoquera une erreur de sélection non trouvée.

+0

oh, je vais essayer d'ajouter le contexte aussi alors. Assez bizarre puisque seule cette propriété échoue. – Prody

+0

Je soupçonne que l'incohérence dans l'échec avec d'autres propriétés est un peu de chance. –

Questions connexes