Pergunta

Como posso configurar um controlador de vista para atualizar os campos na vista só ele é empurrado em um controlador de navegação e libera os objetos quando é estalado a partir de vistas do controlador de navegação.

Meu objetivo é que para um controlador de vista:

  1. exibição de atualização só quando é empurrado na navegação controlador de pilha
  2. dados libera quando é estalado a partir da navegação controlador de pilha
  3. reutilizar o controlador tanto quanto possível (para eliminar arquivos xib de carga / descarga em cima)

Existem métodos delegado para viewWillBePushed: e viewWillBePopped:?

Exemplo

Vamos dizer que tenho três camadas de pontos de vista:

Movies (MovieListController)
   --> Movie Basic Info (MovieInfoController)
        --> Movie Credits (MovieCreditsController)

Suponha que tenhamos um Movie classe para representar cada filme.

Aqui, quero apenas para ter três UIViewControllers, uma instância de cada no tempo de execução do programa. Para que eu possa reutilizar o mesmo MovieInfoController para diferentes filmes e semelhante MovieCreditsController.

No entanto, eu também gostaria MovieInfoController atualizar apenas seus campos de visualização (por exemplo, título, data de lançamento, etc) somente quando ele é empurrado na pilha. Implementando a exibição em viewWillAppear vai forçá-lo a atualizar os campos, mesmo quando MovieCreditsController é estalado.

Além disso, quero MovieInfoController para liberar sua referência a Movie, quando ele é estourado, e qualquer (por exemplo imagem cover) potencialmente grande objeto. Implementar esta lógica em viewWillDisappear fará com que ele libere os dados quando é empurrando MovieCreditsController na pilha.

Existe razoável? Am I indo pelo caminho errado?

Foi útil?

Solução

Você está 90% lá, porque você criou um objeto de filme. MovieListController deve possuir um único MovieInfoController. Ele deve chamar -setMovie: antes de empurrá-lo para o controlador de navegação. A chamada para -setMovie: deve ser o que atualiza seus campos.

Da mesma forma, MovieInfoController deve possuir um único MovieCreditsController, e deve chamar -setMovie: sobre ela antes de empurrá-lo para o controlador nav.

Em MovieListController e MovieInfoController, você pode chamar [subController setMovie:nil] em sua -viewDidAppear: para liberar memória.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top