Tôi đang viết một "nhà máy" theo ngữ cảnh sẽ duy trì từ điển của các đối tượng chuyển đổi/hành động kế thừa từ một số lớp Chuyển đổi. Lớp này có một phương pháp:Sử dụng lớp làm khóa trong NSDictionary
- (Class)classResponsibility
Hoặc một cái gì đó tương tự, như vậy mà một lớp StringConverter sẽ thực hiện các phương pháp như:
- (Class)classResponsibility {
return [NSString class];
}
Sau đó để lưu trữ chuyển đổi mà trong từ điển, tôi đã hy vọng vào làm một cái gì đó như:
[converters setValue:stringConverter forKey:[stringConverter classResponsibility]];
Nhưng trình biên dịch than phiền rằng loại "Lớp" là loại thông số không hợp lệ cho đối số 2 của phương thức setValue: forKey:. Tôi đã muốn tránh đặt chìa khóa làm tên của lớp ("NSString"), nhưng nếu đó là giải pháp tốt nhất thì tôi sẽ đi với nó.
Giải thích tuyệt vời! –
kể từ XCode 4.5, trước tiên bạn cần truyền nó để không nhận được cảnh báo: [dictionary setObject: object forKey: (id) someClass]; xem câu trả lời này http://stackoverflow.com/questions/12525324/unable-to-use-class-as-a-key-in-nsdictionary/12525479#12525479 –
odyth
Bạn có biết lý do kỹ thuật tại sao các khóa phải tuân thủ 'NSCopying' '? – Drux