Tôi có một lớp mà tôi đang đóng gói ABRecordID với và khi nó được sử dụng như một chìa khóa để thêm vào NSMutableDictionary, tôi nhận được thời gian chạy ngoại lệ:NSInvalidArgumentException/copyWithZone ngoại lệ với NSMutableDictionary
"NSInvalidArgumentException: *** - [MyRecordId copyWithZone:]: chọn không được công nhận gửi đến dụ"
MyRecordId khai báo là:
@interface MyRecordId : NSObject {
ABRecordID abRecordId;
}
-(id)initWithId:(ABRecordID)anABRecordId;
@property (nonatomic) ABRecordID abRecordId;
@end
Thêm vào từ điển:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
MyRecordId *recordId = [[MyRecordId alloc] initWithId:anABRecordId];
[dict setObject:@"hello" forKey:recordId];
Dòng cuối cùng gây ra ngoại lệ .. Tôi biết rằng bạn không thể lưu trữ các loại phi vật thể như là chìa khóa cho một cuốn từ điển nhưng tôi nghĩ rằng gói nó trong lớp NSObject có nguồn gốc sẽ làm cho nó ổn.
Tôi có được phép lưu trữ ABRecordID trong các đối tượng khác không? Tôi có nên làm gì khác không?
Tôi không biết rằng NSValue phù hợp nhất với mục đích này. Tôi sẽ sử dụng trình khởi tạo nào để xây dựng nó bằng 'ABRecordID'? –
Tôi sẽ có giá trị 'NSValueWithNonretainedObject', nên làm việc cho bạn. Chỉ cần ghi nhớ rằng nó sẽ không giữ lại đối tượng của bạn cho bạn tất nhiên ... – Chris