2012-11-23 23 views
5

pubblicato Su un iPhone (il server), ho provato a pubblicare un servizio e il mio codice incontrato metodo delegato dell'oggetto NSNetService:NSNetServiceBrowser non ha trovato il servizio

-(void)netServiceDidPublish:(NSNetService *)sender 

quindi credo che il mio servizio @"_chatty._tcp." ha pubblicato con successo. Poi su un altro iPhone (il client), io uso NSNetServiceBrowser di trovare il mio servizio, ma non ha incontrato il metodo delegato:

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing 

ho trovato alcune domande relative al mio caso su questo sito, la maggior parte della risposta ricorda di controllare l'oggetto delegato se è fuori portata o no. Sono sicuro che il mio delegato funziona bene perché ha incontrato un altro metodo delegato come:

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser 

Qualcuno può aiutarmi a scoprire il motivo?

Ecco alcune parti del mio codice:

ho init il servizio del genere:

#define MY_PROTOCOL @"_chatty._tcp." 

self.myService = [[NSNetService alloc] 
        initWithDomain:@"" type:MY_PROTOCOL 
        name:@"thaith" port:self.port]; 

La porta viene inizializzato con un dato listeningSocket nella classe Browser:

NSNetServiceBrowser* finder = [[NSNetServiceBrowser alloc] init]; 

//I also retain the finder. 
finder.delegate = self; 

[finder searchForServicesOfType:MY_PROTOCOL inDomain:@""]; 
+0

Anche io sto affrontando lo stesso problema ... hai trovato la soluzione per questo? –

risposta

0

Vorrei restringere l'ambito e cercare di trovare il problema. Innanzitutto, scopri se il servizio è pubblicato correttamente. Utilizzare l'applicazione Bonjour Browser (è possibile trovarla in Internet) su un computer all'interno della stessa rete locale in cui si pubblica il servizio. Spero che tu pubblichi e navighi nella stessa rete locale. Se il browser Bonjour può vedere il tuo servizio, sai che è pubblicato correttamente. Quindi lavorare sul lato browser per connettersi ad esso.

+0

Grazie per il tuo suggerimento, sì, ho fatto un breakpoint sul metodo delegate - (void) netServiceDidPublish: (NSNetService *) mittente e ci si imbatte in esso, quindi penso che il mio servizio pubblico con successo. Non mi sono imbattuto in delegato didFIndService –

0

Possibili soluzioni

  1. controllare sia WiFi identificatori sono gli stessi
  2. check entrambi sono in rete stessa WiFi
  3. Controllare il delegato NSNetServiceBrowser assegnato come stessa classe

Download finale sam ple Apple.Developer Witap Application, installare su due dispositivi, testare e confermare il funzionamento.

+1

Ho verificato con l'esempio di Witap e sembra che non faccia nulla, come la mia app. Controllo anche l'indirizzo wifi e lo configuro manualmente per renderli la stessa rete, ma non funzionano, la mia app e l'app witap. –

9

Dopo aver incontrato lo stesso problema e aver rinunciato per un mese. Sono appena tornato ad esso e risolto:

Anche se the sample code in the docs sembra implicare altrimenti, non utilizzare una variabile locale per il NSNetServiceBrowser. Appena esce dal campo di applicazione viene raccolta la spazzatura. Rendi finder una variabile di istanza o una proprietà in modo che rimanga incollata. Non ho notato subito come il delegato netServiceBrowserWillSearch: è stato chiamato così ho pensato che fosse tutto ok ...

+0

Qui c'è un buon esempio di codice: https://github.com/thesecretlab/LearningCocoa3rdEd/blob/ecc8d34b151c116c4fc3b3296b3c0df1e57171d5/iTunesDetector/iTunesDetector/AppDelegate.m – Ryan

+0

Grazie. Questo ha risolto il mio problema. – david72

1

Invece di scaricare il browser Bonjour, io suggerisco di usare il comando da terminale:

dns-sd -B _chatty._tcp local. 

Per me, si vede che il lato server sta lavorando bene. Attualmente, posso trovare il servizio all'avvio della mia applicazione, il mio unico problema è che, una volta arrestato il server, ottengo l'evento "rimosso" ma eseguendolo di nuovo, non posso più scoprirlo. So che il problema è dalla parte dei miei clienti, grazie a dns-sd - B

Problemi correlati