NSInvalidArgumentException/copyWithZone exception with NSMutableDictionary

iphone

Solution

Use NSNumber to store the ABRecordID in an Obj-C class:

[dict setObject:@"hello" forKey:[NSNumber numberWithInt:recordId]];

to obtain the recordId again, do:

recordId = [[dict objectForKey:@"hello"] intValue];

Problem

I have a class that I'm encapsulating ABRecordID with and when it's used as a key to add to an NSMutableDictionary, I get the run-time exception: "NSInvalidArgumentException: *** -[MyRecordId copyWithZone:]: unrecognized selector sent to instance" MyRecordId declared as: ``` @interface MyRecordId : NSObject { ABRecordID abRecordId; } -(id)initWithId:(ABRecordID)anABRecordId; @property (nonatomic) ABRecordID abRecordId; @end ``` Adding to dictionary: ``` NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; MyRecordId *recordId = [[MyRecordId alloc] initWithId:anABRecordId]; [dict setObject:@"hello" forKey:recordId]; ``` The last line causes the exception.. I know that you can't store non-object types as keys for a dictionary but I thought that wrapping it up in NSObject derived class would make it okay. Am I not supposed to store ABRecordID in other objects? Should I be doing something else?

Original source