2010-08-23 3 views
0

J'ai une application Iphone avec 2 threads. L'un écoute le serveur, et l'autre fait des trucs UIKit, OpenGl.Exécution de la méthode App Delegate sur le thread principal à partir du thread secondaire

Je dois exécuter une méthode qui met à jour une vue de la thats thread secondaire écoute à un serveur sur le thread principal qui gère les vues si j'ai utilisé

performSelectorOnMainThread:@selector"createGuessingView" withObject:nil waitUntilDone:YES 

mais pour une raison quelconque, la méthode ne fait jamais réalisé. Mettre un point d'arrêt ou un printf au début de la méthode montre qu'il n'est jamais appelé. Je suis vraiment perplexe ici. J'ai utilisé performselectoronmainthread dans le même programme pour mettre à jour les champs de texte et cela a fonctionné parfaitement.

modifier:

figured it out :) Le problème est que l'objet que j'utilisais performSelectorOnMainThread a été fixé par ce fil avant que l'objet a été initialisé (même alloué) dans le thread principal. Par conséquent, la référence indiquait null et le sélecteur n'était pas reconnu.

Merci pour l'aide

+0

Etes-vous sûr que le récepteur de l'appel à performSelectorOnMainThread est non nul? – imaginaryboy

Répondre

2

Si ce pas:

@selector(createGuessingView) 

sans guillemets.

-

EDIT (en réponse au commentaire)

Qu'est-ce que la signature de votre méthode? Si c'est:

- (void)createGuessingView:(id)something 

alors vous devriez vous rappeler les deux points, comme dans @selector (createGuessingView :)

+0

oh ouais, désolé, c'est ce que j'ai, je l'ai juste copié mal, d'autres idées? – MEURSAULT

+0

la signature est - (void) createGuessingView; sans paramètre – MEURSAULT

+0

Appellez-vous la méthode performSelectorOnMainThread sur l'instance d'objet dotée de la méthode createGuessingView? –

Questions connexes