Deferring viewWillAppear até webViewDidFinishLoad

Tenho um aplicativo que usaUIWebViews em vários controladores de exibição. OUIWebViews são usados para renderizar html gerado localmente, sem necessidade de acesso lento à red

Para economizar memória, eu os carrego somente sob demanda, conforme solicitado pelo viewcontrollerviewWillAppear ligue de volta. (E descarregue instâncias fora da tela em resposta adidReceiveMemoryWarning mensagens.)

O problema é que o usuário pode ver o html sendo renderizado, às vezes acompanhado por flashes de estilo e outros artefatos desagradáveis. Prefiro que a renderização seja feita fora da tela e revele a visualização totalmente renderizada quando estiver pront

Seria muito arrumado poder ter oviewWillAppear não retornará até que o UIWebView seja totalmente renderizado. Mas como

Eu digo aUIWebView o que render enviando umloadHTMLString:baseURL: mensagem. Isso é assíncrono e, algum tempo (em breve) mais tarde, o delegado da visualização na web é chamado de voltawebViewDidFinishLoad.

Eu experimentei executar um runloop dentroviewWillAppear, executando oNSDefaultRunLoopMode ouUITrackingRunLoopMode. Isso funciona no simulador (queixa-se ao log

[Sincronização de transação] chamada na transação

mas funciona), mas em um dispositivo ele trava, comwebViewDidFinishLoad nunca sendo chamado.

(Além disso, parece que oUIWebView propriedade @ loading não funciona. Pelo menos, depois que eu ligo paraloadHTMLString:baseURL: e antes de receber o retorno de chamada, não é verdade.)

questionAnswers(4)

yourAnswerToTheQuestion