Tutte le connessioni server nel mio app va allo stesso modo:NSURLConnection sendSynchronousRequest/sendAsynchronousRequest non riesce dopo applicazione ucciso da iOS
- dispatch_async ad un secondo filo.
- sendSynchronousRequest
blocchi fail/success sul thread principale.
Quanto segue non è il codice completo, solo il concetto:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSURL *url = [NSURL URLWithString:@"someURL"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; NSURLResponse *response = nil; NSError *error; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; if (error) { dispatch_async(dispatch_get_main_queue(), ^{ _failureBlock(error); }); } else { dispatch_async(dispatch_get_main_queue(), ^{ _successBlock(data); }); });
Bene l'applicazione funziona benissimo! Posso usarlo per migliaia di connessioni server e funziona sempre quando eseguo un nuovo caricamento dell'app. Il problema inizia quando si verifica quanto segue:
- Inviare l'app a BG.
- Aspetta un po 'di tempo ...
- L'app viene uccisa da iOS.
- Aperto di nuovo, l'iOS carica l'intera app da zero. (vedi schermata iniziale seguita dalla prima schermata, non è quello che ho lasciato a BG ..)
In questo scenario ho NSURLConnectionErrors !! Tutti loro! Codice 1003, Codice 1009, Codice 9 ... Basta nominarlo! Ottengo errori per tutte le connessioni del server che inizia quando viene caricata l'app. Qualsiasi altra connessione dopo che funziona bene! incluso l'aggiornamento di quelli che sono falliti!
Sembra quasi di provare a raggiungere il mio server troppo presto o troppo presto, MA Controllo e supera un test di reachabillity prima di iniziare una connessione.
Potrebbe davvero usare qualche aiuto qui. Grazie in anticipo.
AGGIORNAMENTO: Come suggerito di seguito, provato a usare sendAsynchronousRequest - mi ha dato lo stesso identico comportamento. (err: 1001 questa volta).
L'aggiunta di ritardi è un po 'flakey e un ricorso all'ultimo minuto. Prendi in considerazione l'utilizzo di NSNotifications per dire ad altre parti del tuo codice cosa fare dopo che qualcosa è finito. – BlueFish