53 votes

Stocker le sélecteur comme valeur dans un NSDictionary

Existe-t-il un moyen de stocker un sélecteur dans un NSDictionary, sans le stocker en tant que NSString?

105voto

Georg Fritzsche Points 59185

SEL est juste un pointeur, que vous pouvez stocker dans un NSValue :

 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
                       [NSValue valueWithPointer:@selector(foo)], @"foo",
                       nil];
 

Pour récupérer le sélecteur, vous pouvez utiliser:

 SEL aSel = [[dict objectForKey:@"foo"] pointerValue];
 

10voto

David H Points 906

Une alternative à la solution de Georg serait de convertir le sélecteur en NSString avant de le stocker dans le NSDictionary:

 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
                      NSStringFromSelector(@selector(foo)), @"foo",
                      nil];

SEL selector = NSSelectorFromString([dict objectForKey:@"foo"]);
 

Cette technique, bien que utilisant davantage de mémoire, vous permet de sérialiser le NSDictionary entier en tant que chaîne via des bibliothèques telles que JSONKit.

6voto

drawnonward Points 35444

Un NSDictionary n'est en réalité qu'un CFDictionary qui conserve et libère toutes les clés et valeurs. Si vous créez un CFDictionary directement, vous pouvez le configurer pour ne pas conserver et libérer les valeurs. Vous pouvez transtyper CFDictionaryRef en NSDictionary * et inversement.

3voto

kostas Points 21

En cas d'utilisation de UILocalNotification le seul moyen est d'utiliser NSSelectorFromString([dict objectForKey:@"foo"]) . Avec valueWithPointer l'application se bloque lorsque vous définissez la propriété userInfo de l'objet UILocalNotification . Faites attention.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X