Как я могу сделать NSDictionary содержать селектор в качестве одного из его значений?

Этот код находится в подклассе UITableViewController viewDidLoad. Подкласс UITableViewController содержит тестовый метод.

Он вылетает без исключения исключения.

id dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys: @"some text", @"text", @selector(test), @"selector", nil]

Ответ 1

pix0r хорошо, но я обычно предпочитаю использовать строки, потому что они более устойчивы к сериализации и делают словарь более легким для чтения в отладочном выходе.

// Set selector
SEL inSelector = @selector(something:);
NSString *selectorAsString = NSStringFromSelector(inSelector);
id dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"some text", @"text", selectorAsString, @"selector", nil];

// Retrieve selector
SEL outSelector = NSSelectorFromString([dict objectForKey:@"selector"]);

Ответ 2

Используйте NSValue для переноса селектора:

// Set selector
SEL inSelector = @selector(something:);
NSValue *selectorAsValue = [NSValue valueWithBytes:&inSelector objCType:@encode(SEL)];
id dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"some text", @"text", selectorAsValue, @"selector", nil];

// Retrieve selector
SEL outSelector;
[(NSValue *)[dict objectForKey:@"selector"] getValue:&outSelector];
// Now outSelector can be used as a selector, e.g. [self performSelector:outSelector]