So che questa domanda è stato risposto molto tempo fa , ma nel caso in cui qualcuno si imbatta in esso come ho fatto ...
La combinazione di NSStringFromSelector
e NSSelectorFromString
come ans cercato sopra è probabilmente il modo migliore per andare. Ma se lo vuoi davvero, puoi utilizzare un selettore come valore o chiave in un NSDictionary
.
Un selettore (tipo SEL
) è implementato come puntatore a una struttura nei runtime Objective-C di Apple. Un puntatore non può essere utilizzato direttamente in un dizionario, ma un puntatore può essere avvolto in un oggetto NSValue
che può essere utilizzato.
Usando questo metodo è possibile memorizzare un selettore come un valore in un dizionario usando codice come questo:
dictionary =
[NSDictionary dictionaryWithObject:[NSValue valueWithPointer:selector]
forKey:key];
Un selettore può essere recuperato utilizzando il codice come questo:
SEL selector = [[dictionary objectForKey:key] pointerValue];
Allo stesso modo per l'utilizzo un selettore come chiave:
dictionary =
[NSDictionary dictionaryWithObject:value
forKey:[NSValue valueWithPointer:selector]];
value = [dictionary objectForKey:[NSValue valueWithPointer:selector]];
Non implementare un metodo non causa un EXC_BAD_ACCESS. Si ottiene un errore "non riconosce il selettore". Piuttosto, il problema è il fatto che i selettori non sono affatto oggetti. – user102008
@ user102008 Sì, si blocca perché non sono oggetti. Ma ancora non funzionerebbe correttamente se gli oggetti non implementassero 'retain' e' release'. –