2013-09-30 2 views
10

Ho problemi a rimanere connesso usando il Multipeer Connectivity Framework in iOs7. Attualmente la mia app gestisce la navigazione e la pubblicità a livello di programmazione utilizzando MCNearbyServiceAdvertiser e MCNearbyServiceBrowser. Ho una vista di avviso che chiede all'utente se è un browser o un inserzionista. Al ritorno da tale visualizzazione istanziato un MCNearbyServiceAdvertiser o Browser di conseguenza.Connettività di Multipeer Disconnetti

#pragma - Alert Delegate 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 
     _browser = [[MCNearbyServiceBrowser alloc]initWithPeer:_peerID serviceType:@"Context-xl"]; 
     [_browser setDelegate:self]; 
     [self.detailViewController setRemote:YES]; 
     [_browser startBrowsingForPeers]; 
    } else 
    { 
     _advertiser = [[MCNearbyServiceAdvertiser alloc]initWithPeer:_peerID discoveryInfo:nil serviceType:@"Context-xl"]; 
     [_advertiser setDelegate:self]; 
     [self.detailViewController setRemote:NO]; 
     [_advertiser startAdvertisingPeer]; 
    } 
    [self.detailViewController configureView]; 
} 

La mia sessione delegato metodo peer: ... DidChangeState ... è sempre chiamato due volte, una volta per la connessione e di nuovo per la disconnessione. Non interromperò l'inserzionista o il browser dopo l'avvio della sessione. Dovrei interrompere la navigazione/pubblicità?

+0

Ho continuato a lavorarci. Ho pensato che forse l'impostazione dei punti di interruzione stava causando la disconnessione dei dispositivi, che in realtà sembra essere il caso. Tuttavia, i dispositivi non restano collegati durante il normale funzionamento. –

+1

Sto avendo lo stesso problema. I dispositivi si connettono per un po ', quindi si disconnettono e non restano collegati o ricollegati. –

+0

È accaduto molto quando stavo facendo un trasferimento di file usando il metodo sendData: ToPeer di MCSession. Da allora sono passato all'apertura di uno stream utilizzando il metodo startStream: withName e i dispositivi sono rimasti connessi. –

risposta

6

EDIT Utilizzato un ticket di supporto con Apple e hanno confermato che chiamare sendData con troppi dati o troppo spesso può causare disconnessioni.

EDIT La mia ipotesi è che Apple abbia un thread o una coda che sta eseguendo il polling per verificare se i peer sono connessi. Se questo thread/coda si blocca (vale a dire un punto di interruzione viene colpito o l'app collega la CPU o fa qualcosa che richiede un po 'di tempo nel thread principale) sembra che ciò causi una disconnessione.

Creare la mia sessione senza crittografia sembra aver aiutato le prestazioni e con i disconnessi, anche se succedono ancora.

MCPeerID* peerId = [[MCPeerID alloc] initWithDisplayName:self.displayName]; 
self.peer = [[MultiPeerPeer alloc] initWithDisplayName:peerId.displayName andPeer:peerId]; 
self.session = [[MCSession alloc] initWithPeer:peerId securityIdentity:nil encryptionPreference:MCEncryptionNone]; 

Inoltre, ho trovato chiamando sendData troppo spesso (più di 30-60 volte al secondo) può causare il quadro per ottenere in cattivo stato e causare si blocca e si disconnette.

+0

In realtà ho parlato con l'ingegnere Apple che ha lavorato sulla connettività multi-peer e hanno confermato che chiamare troppo spesso sendData può causare problemi. Forse iOS 8 risolverà questo problema, vedremo ... – jjxtra

+0

Ehi, amico mio. Hai un link per il ticket di supporto? – Omer

+0

@Omer no purtroppo l'email è stata cancellata. – jjxtra