Comment j'appelle performSelectorOnMainThread: avec un sélecteur qui prend & gt; 1 arguments?
Un appel à performSelectorOnMainThread:
ressemble à ceci:
[target performSelectorOnMainThread:action withObject:foo waitUntilDone:NO];
où le "résultat" est un argument passé à "l'action". Une action correspondante serait:
- (void)doSomethingWithThing1:(id *)thing1
Quelle est la bonne syntaxe pour appeler une action qui se > 1 argument? Tels que:
- (void)doSomethingWithThing1:(id *)thing1 andThing2(id *)thing2 andAlsoThing3(id *)thing3
[target performSelectorOnMainThread:action withObject:??? waitUntilDone:NO];
source d'informationauteur dugla | 2009-09-22
Vous devez vous connecter pour publier un commentaire.
En réponse à une question similaire sur le passage de la non-objets à une méthode de
performSelectorOnMainThread:
je l'ai souligné Dave Musée du catégorie de NSObjectqui permet de faire quelque chose comme ce qui suit:pour la réalisation de votre multi-argument de la méthode sur le thread principal. Je pense que c'est plutôt une solution élégante. En coulisses, il enroule les choses dans un NSInvocation, en invoquant que sur le thread principal.
La Ambre cadre fait quelque chose de semblable à cela, en tant que bien.
Vous pouvez le faire en mettant votre args dans un dictionnaire ou d'une matrice, et de passage que pour une fonction spéciale
Si vous souhaitez conserver la signature de la méthode du récepteur alors je pense que vous aurez besoin de regarder à l'aide de
NSInvocation
qui vous permet de spécifier plusieurs valeurs d'argument.Vous pourriez emballer votre appel et l'utilisation d'un dictionnaire comme un conteneur pour vos arguments, comme l'a suggéré dans une autre réponse, mais pour moi, cela semble un peu une odeur de code.
Une meilleure solution le long de cette ligne serait de créer une classe qui encapsule les valeurs de l'argument - c'est à dire un fortement typé approche. Ainsi, par exemple, au lieu de passer
firstname
surname
vous souhaitez passer une instance d'unPerson
classe. C'est probablement un meilleur itinéraire pour aller vers le bas parce que les méthodes avec moins d'arguments peuvent produire plus propre code, mais c'est un toute autre histoire.