7 votes

Exception NSInvalidArgumentException/copyWithZone avec NSMutableDictionary

J'ai une classe avec laquelle j'encapsule ABRecordID et lorsqu'elle est utilisée comme clé pour ajouter à un NSMutableDictionary, j'obtiens l'exception d'exécution :

"NSInvalidArgumentException : *** -[MyRecordId copyWithZone :]: unrecognized selector sent to instance"

MyRecordId déclaré comme :

@interface MyRecordId : NSObject {
    ABRecordID abRecordId;
}

-(id)initWithId:(ABRecordID)anABRecordId;
@property (nonatomic) ABRecordID abRecordId;

@end

Ajouté au dictionnaire :

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
MyRecordId *recordId = [[MyRecordId alloc] initWithId:anABRecordId];
[dict setObject:@"hello" forKey:recordId];

La dernière ligne provoque l'exception.. Je sais que l'on ne peut pas stocker des types de non-objets en tant que clés d'un dictionnaire, mais j'ai pensé qu'en l'enveloppant dans une classe dérivée de NSObject, tout irait bien.

Ne suis-je pas censé stocker ABRecordID dans d'autres objets ? Devrais-je faire autre chose ?

0voto

Rob Napier Points 92148

Diederik est sur la bonne voie, mais compte tenu du type de ABRecordID je recommande d'utiliser NSNumber (un NSValue sous-classe). Vous utiliserez -initWithInt: para ABRecordID qui est un int32_t .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X