Domanda

Sto usando il Asyncudpsocket Biblioteca di terze parti nella mia app per iPhone e per la maggior parte funziona alla grande. Ho un'istanza singleton di un AsyncUDPSocket che uso per tutto il traffico di rete. La mia app è registrata per il monitoraggio della posizione in background e si sveglierà e invierà pacchetti di aggiornamento della posizione sulla rete durante l'esecuzione in background. Tutto questo funziona in modo schiacciante in base allo sfondo, in primo piano, al telefono bloccato o sbloccato, tranne quando faccio quanto segue:

  1. Inizia la mia app
  2. Disabilita il monitoraggio della posizione nelle impostazioni della mia app (quindi nessun risveglio in background)
  3. Premere il pulsante Home (l'app va in background, la presa è "asciugata" con il resto dell'app)
  4. Blocca il telefono
  5. Sblocca il telefono
  6. Riprendi l'app
  7. Tenta di riavviare il monitoraggio e inviare qualcosa dalla presa. Non appena ci provo, ottengo un SIGPIPE/EPIPE Errore e l'app si arresta in modo anomalo.

Ho pensato che il modo migliore per gestire questo sarebbe quello di chiudere e rilasciare la presa ogni volta che l'applicazione esce e il monitoraggio dello sfondo non è abilitato, ma quando provo [socket close] o [socket release] sul AsyncUDPSocket, Ottengo vari EXC_BAD_ACCESS errori. Ho presentato un bug con il team Dev, ma mi chiedevo se qualcuno qui potesse dare alcune idee su come evitare il SIGPIPE Errore interamente o altri modi per mantenere viva la presa senza rilasciarla. Grazie.

È stato utile?

Soluzione 2

Nel caso in cui qualcuno sia curioso (il che, a giudicare dalle statistiche di questa domanda, non lo sono), non sono stato in grado di determinare cosa stava causando il SIGPIPE errore, ma alla fine ha risolto i miei problemi di gestione della memoria (che erano dovuti a un'implementazione difettosa di onUdpSocketDidClose Nel mio delegato) in modo da poter reinizializzare la presa ogni volta che l'app riavvia.

Altri suggerimenti

Ottima osservazione - Sì, sembra che dopo aver inviato l'attività in background e quindi bloccare il telefono, le prese vengono lasciate cadere e la prossima volta che provi a usarlo si viene bludgeon con un sigipe.

Idee su come affrontarlo qui:Sigpipe Crash Quando si commuovi l'attività di sfondo(È impostato Ignora per Sigpipe per l'intera app, o per la presa o fornisce Hanler per esso)

ps. Inoltre, sembra che l'impostazione per ignorare Sigpipe non funzioni con il debugger allegato, quindi confronta con e w/o.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top