2010-08-19 3 views
2

J'ai eu un problème vraiment ennuyeux. Im essayant de rechercher un NSNetService (que je sais existe). J'ai copié l'exemple de code de http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do dans ma propre application. Je peux voir (dans l'exemple de programme) que mon service est créé. Mais quand je tape search, et que je lance une recherche NSNetServiceBrowser, rien ne se passe. La fonction de délégué plus récente est appeléeLe délégué NSNetServiceBrowser n'a pas été appelé lors de la recherche

-(void)netServiceBrowser:(NSNetServiceBrowser *)aBrowser didFindService:(NSNetService *)aService moreComing:(BOOL)more { 

J'ai été vérifier des choses comme ça sont encore conservés mes objets, et je ne peux pas voir que tout est sorti (et je ne pas GC sur). Quelqu'un at-il des idées quoi faire? Le code est exactement le même que dans l'exemple, seulement j'ai quelques autres choses autour de lui (en cours d'exécution d'une fenêtre openGL).

+0

Etes-vous sûr d'avoir affecté le bon délégué à l'instance de NSNetServiceBrowser? – fbrunel

+0

J'ai le même problème. Mais il n'est appelé que lorsque je publie le service et que je le recherche depuis le même appareil, mais lorsque je le teste avec deux appareils, je ne trouve jamais le service. –

Répondre

2

Cette question est ancienne (iOS 4/5 ère?), Donc je ne sais pas si c'est la réponse pour vous, mais assurez-vous que vous utilisez NSNetServiceBrowser du thread principal de votre application uniquement.

(Je ne me souviens pas si elle doit également être initialisée sur le thread principal, ou si elle doit juste être initialisée et appelée -search sur le même thread, ou s'il suffit d'appeler -search du thread principal , mais j'ai eu exactement le même problème et dans mon cas, il était lié à l'utilisation d'un thread d'arrière-plan.)

+0

Juste testé cela moi-même, vous devez init NSNetService du thread principal lui-même aussi. Il ne suffit pas d'affecter le délégué et de faire un appel tel que "searchForServicesOfType ..." de NSNetService dans le thread principal. J'ai jeté le contenu de netservice dans un dispatch_async (dispatch_get_main_queue(),^{ ...}); bloc. –

Questions connexes