41 votes

PerformSelectorOnMainThread iOS avec plusieurs arguments

Je voudrais effectuer un sélecteur sur le thread principal à partir d'un autre thread, mais le sélecteur a plusieurs arguments, similaire à ceci:

-(void) doSomethingWith:(int) a b:(float)b c:(float)c d:(float)d e:(float)e { //... }

Comment puis-je obtenir ce travail avec performSelectorOnMainThread: withObject: waitUntilDone:?

MODIFIER

Je voudrais expliquer pourquoi j'ai besoin de cette.

Je travaille avec UIImageViews sur le thread principal, et je fais les calculs pour eux sur un autre thread. J'utilise beaucoup de calculs, donc si je fais tout sur le thread principal de l'application gal. Je sais que des éléments de l'INTERFACE ne peut être manipulé sur le thread principal, c'est pourquoi je l'aime travailler de cette façon, de sorte que le thread principal peut écouter les événements tactiles sans gal.

98voto

DarkDust Points 47584

Lorsque vous utilisez iOS> = 4, procédez comme suit:

 dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething:1 b:2 c:3 d:4 e:5];
});
 

C'est comme faire waitUntilDone:NO . Si vous souhaitez attendre que la méthode soit terminée, utilisez plutôt dispatch_sync .

6voto

Macmade Points 27414

Vous devrez utiliser un NSInvocation

Créez l'objet, définissez la cible, le sélecteur et les arguments.
Ensuite, utilisez

 [ invocationObject performSelectorOnMainThread: @selector( invoke ) withObject: nil, waitUntilDone: NO ];
 

3voto

samfisher Points 6889

vous pouvez passer un objet de type NSDictionary / NSArray avec les arguments requis.

et accepter le même type d'objet dans votre fonction. décomposez ensuite les valeurs et procédez au traitement.

vous devez utiliser NSNumber pour les valeurs numériques pour les ajouter à NSarray / NSDictionary et, plus tard, à votre fonction, vous pouvez les reconvertir avec intValue - floatValue etc.

meilleur de l'argent.

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