Tôi biết câu hỏi này được trả lời một thời gian dài trước đây , nhưng chỉ trong trường hợp bất cứ ai tình cờ gặp nó như tôi đã làm ...
Sự kết hợp của NSStringFromSelector
và NSSelectorFromString
như ans wered ở trên có lẽ là cách tốt nhất để đi. Nhưng nếu bạn thực sự muốn, bạn có thể sử dụng công cụ chọn làm giá trị hoặc khóa trong một NSDictionary
.
Bộ chọn (loại SEL
) được triển khai dưới dạng con trỏ trỏ đến cấu trúc trong các thời gian chạy Objective-C của Apple. Một con trỏ không thể được sử dụng trực tiếp trong một từ điển, nhưng một con trỏ có thể được bọc trong một đối tượng NSValue
có thể được sử dụng.
Sử dụng phương pháp này, bạn có thể lưu trữ một selector như một giá trị trong một cuốn từ điển sử dụng mã như thế này:
dictionary =
[NSDictionary dictionaryWithObject:[NSValue valueWithPointer:selector]
forKey:key];
Một bộ chọn có thể được lấy ra sử dụng mã như thế này:
SEL selector = [[dictionary objectForKey:key] pointerValue];
Tương tự như vậy cho việc sử dụng công cụ chọn làm khóa:
dictionary =
[NSDictionary dictionaryWithObject:value
forKey:[NSValue valueWithPointer:selector]];
value = [dictionary objectForKey:[NSValue valueWithPointer:selector]];
Không triển khai phương thức không gây ra EXC_BAD_ACCESS. Bạn nhận được lỗi "không nhận dạng bộ chọn". Thay vào đó, vấn đề là một thực tế rằng các bộ chọn không phải là đối tượng ở tất cả. – user102008
@ user102008 Có, nó bị treo vì chúng không phải là đối tượng. Nhưng nó vẫn không hoạt động đúng nếu các đối tượng không thực hiện 'retain' và' release'. –