Je souhaite ajouter des sélecteurs à un NSMutableArray. Mais puisque ce sont des types opaques et pas d'objets, ça ne marcherait pas, n'est-ce pas? Y a-t-il un objet wrapper que je peux utiliser? Ou dois-je créer le mien?Y a-t-il un objet wrapper pour SEL?
4
A
Répondre
5
Vous pouvez mémoriser le nom NSString du sélecteur dans le tableau et utiliser
SEL mySelector = NSSelectorFromString([selectorArray objectAtIndex:0]);
pour générer le sélecteur de la chaîne stockée.
De plus, vous pouvez emballer le sélecteur comme NSInvocation en utilisant quelque chose comme
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:mySelector]];
[invocation setTarget:self];
[invocation setSelector:mySelector];
[invocation setArgument:&arg atIndex:2];
[invocation retainArguments];
Cet objet NSInvocation peut alors être stocké dans le tableau et a invoqué plus tard.
9
Vous pouvez envelopper dans une instance NSValue
comme suit:
SEL mySelector = @selector(performSomething:);
NSValue *value = [NSValue value:&mySelector withObjCType:@encode(SEL)];
puis ajouter de la valeur à votre instance NSMutableArray
.
2
NSValue valueWithPointer/pointerValue fonctionne tout aussi bien. Vous avez juste besoin de savoir que vous ne pouvez pas sérialiser le tableau (c'est-à-dire l'écrire dans un fichier) si vous voulez faire cela, utilisez l'approche NSStringFromSelector.
ce sont autant de façons de mettre un sélecteur dans un objet NSValue:
id selWrapper1 = [NSValue valueWithPointer:_cmd];
id selWrapper2 = [NSValue valueWithPointer:@selector(viewDidLoad)];
id selWrapper3 = [NSValue valueWithPointer:@selector(setObject:forKey:)];
NSString *myProperty = @"frame";
NSString *propertySetter = [NSString stringWithFormat:@"set%@%@:",
[[myProperty substringToIndex:1]uppercaseString],
[myProperty substringFromIndex:1]];
id selWrapper4 = [NSValue valueWithPointer:NSSelectorFromString(propertySetter)];
NSArray *array = [NSArray arrayWithObjects:
selWrapper1,
selWrapper2,
selWrapper3,
selWrapper4, nil];
SEL theCmd1 = [[array objectAtIndex:0] pointerValue];
SEL theCmd2 = [[array objectAtIndex:1] pointerValue];
SEL theCmd3 = [[array objectAtIndex:2] pointerValue];
SEL theCmd4 = [[array objectAtIndex:3] pointerValue];
Questions connexes
- 1. Lorsque jQuery crée un nouvel objet wrapper pour les éléments?
- 2. Un wrapper .net pour Google App Engine?
- 3. sel d'adhésion ASP.NET?
- 4. Sûreté du sel visible publiquement
- 5. Mauvais objet retourné à partir de COM Callable Wrapper
- 6. wrapper PHP pour les graphiques XML/SWF
- 7. Y at-il un objet OpenFileOrFolderDialog dans .NET?
- 8. Existe-t-il un wrapper Objective-C pour gSOAP?
- 9. Comment faire pour écrire un wrapper API Python?
- 10. Y at-il une fonction pour vérifier si un objet est un type de données intégré?
- 11. Données cryptées dans l'URL et le sel
- 12. jQuery: Est-il possible d'attacher des champs/méthodes à un objet wrapper jQuery?
- 13. Joomla sel amélioré mot de passe
- 14. C++ WinInet Wrapper pour Windows Mobile
- 15. Constant Contact - wrapper PHP pour l'API REST?
- 16. SQL comme wrapper pour le registre Windows?
- 17. tourner un objectif objet c dans un objet C++ pour que je puisse passer dans un paramètre pour CFNotification
- 18. Wrapper Factory en Java
- 19. Création d'une image fax G3 avec un wrapper ASN.1 pour ldap photo
- 20. C# Ghostscript Wrapper
- 21. GSA Wrapper dans Java?
- 22. simple wrapper jdbc
- 23. GnuPG Wrapper avec C#
- 24. à quoi sert le sel jeton anti-falsification?
- 25. write java wrapper
- 26. service web wrapper accès
- 27. Java "queue -f" wrapper
- 28. Erreur PHP wrapper?
- 29. Quel est le meilleur wrapper C# disponible gratuitement pour BITS?
- 30. Exemple d'API Wrapper PC-SC ou Omnikey Sync pour Delphi2009
Intéressant - J'ai jamais utilisé NSInvocation - merci! –