2010-07-09 11 views
9

Sto lavorando a un'app per iPad che ha un server HTTP incorporato in ascolto su una porta alta e sto caricando le pagine da questo server HTTP utilizzando a UIWebView.Consenti a UIWebView di caricare http: // localhost: porta/percorso URI senza connessione Internet

Per la funzionalità dell'app, è importante che funzioni quando non è disponibile alcuna connessione di rete.

Il UIWebView sta caricando URL del modulo http://localhost:port/path

Quando ho disattivare Wi-Fi sul mio iPad ed eseguire l'applicazione, delegato s' il UIWebView riceve un messaggio webView:didFailLoadWithError: con il seguente oggetto NSError:

Error Domain=NSURLErrorDomain Code=-1009 UserInfo=0x1b4a50 "no Internet connection" 

Chiaramente l'SDK è intelligente e rileva che non ha una connessione a Internet, ma dovrebbe essere possibile accedere a 127.0.0.1/localhost/::1 senza una connessione Internet. Segnalerò il bug ad Apple ma sto chiedendo qui per un consiglio su possibili soluzioni alternative per questo bug di SDK nel frattempo.

Nota: la modifica dell'architettura dell'applicazione non rientra nell'ambito di questa domanda.

+0

Perché non caricare le pagine con il metodo 'loadHTMLString: baseURL:' di UIWebView? – lucius

+1

Non posso entrare molto nei dettagli (da qui l'ultima frase della domanda), ma ci sono buone ragioni per cui non posso usare quel metodo che comporta la necessità di gestire script, stile e risorse di immagine esterni a cui la pagina fa riferimento e quali non sono facilmente determinabili prima dell'avvio del caricamento iniziale della pagina. Il server Web incorporato funziona come una sorta di server proxy per le risorse ottenute tramite un mezzo diverso dall'accesso alla rete Wi-Fi/3G. – jbg

risposta

7

È possibile esaminare la definizione del proprio schema e implementarlo con NSURLProtocol anziché eseguire un server HTTP. Ciò consentirà di gestire il caricamento degli URL senza dover implementare il protocollo HTTP e aggirare questo problema con l'SDK in cui il protocollo HTTP non funziona correttamente se non si dispone di una connessione di rete.

+0

Grazie. Questo è esattamente quello che stavo cercando, ed ero persino in grado di far rispondere la sottoclasse 'NSURLProtocol' ai protocolli' http' e 'https', sovrascrivendo in modo efficace il comportamento HTTP della piattaforma predefinita. Fantastico. – jbg

+1

Sembra che il problema sia solo con il controllo 'UIWebView' e NON con il controllo più recente -' WKWebView'. Il controllo successivo consente l'accesso ai file host locali http senza la convalida della connessione Internet/errore. Ho notato questo comportamento nella mia app per un video scaricato. La mia app riproduce '

Problemi correlati