Sendo novo no desenvolvimento de objetiva c, cacau e iPhone em geral, tenho um forte desejo de tirar o máximo proveito da linguagem e das estruturas.
Um dos recursos que estou usando são as notas da classe CS193P de Stanford que elas deixaram na web. Ele inclui notas de aula, tarefas e código de exemplo e, como o curso foi ministrado pelos desenvolvedores da Apple, eu definitivamente considero "da boca do cavalo".
Site da classe:
http://www.stanford.edu/class/cs193p/cgi-bin/index.php
A aula 08 está relacionada a uma atribuição para criar um aplicativo baseado em UINavigationController que possui vários UIViewControllers enviados para a pilha UINavigationController. É assim que o UINavigationController funciona. Isso é lógico. No entanto, existem alguns avisos severos no slide sobre a comunicação entre seus UIViewControllers.
Vou citar este slide sério:
http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf
Page 16/51:
Como não compartilhar dados
- Variáveis globais ou singletons
- Isso inclui o delegado do seu aplicativo
- Dependências diretas tornam seu código menos reutilizável
- E mais difícil de depurar e testar
Está bem. Eu estou afim disso. Não jogue cegamente todos os seus métodos que serão usados para a comunicação entre o viewcontroller no delegado do aplicativo e faça referência às instâncias do viewcontroller nos métodos de delegação do aplicativo. Fair 'nuff.
Um pouco mais adiante, temos este slide nos dizendo o que devemos fazer.
Page 18/51:
Práticas recomendadas para fluxo de dados
- Descobrir exatamente o que precisa ser comunicado
- Defina os parâmetros de entrada para o seu controlador de exibição
- Para comunicar o backup da hierarquia, use acoplamentos soltos
- Definir uma interface genérica para observadores (como delegação)
Em seguida, este slide é seguido pelo que parece ser um slide de espaço reservado, onde o professor aparentemente demonstra as melhores práticas usando um exemplo com o UIImagePickerController. Eu gostaria que os vídeos estivessem disponíveis! :(
Ok, então ... eu tenho medo que meu objc-fu não seja tão forte. Também estou um pouco confuso com a linha final na citação acima. Eu tenho pesquisado bastante sobre isso no Google e descobri o que parece ser um artigo decente falando sobre os vários métodos das técnicas de Observação / Notificação:
http://cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html
O método nº 5 indica até delegados como um método! Exceto .... os objetos podem definir apenas um delegado por vez. Então, quando tenho uma comunicação múltipla com o controlador de exibição, o que devo fazer?
Ok, essa é a gangue criada. Eu sei que posso executar facilmente meus métodos de comunicação no delegado do aplicativo por referência às várias instâncias do controlador de exibição no meu appdelegate, mas quero fazer esse tipo de coisa da maneira certa .
Por favor, ajude-me a "fazer a coisa certa", respondendo às seguintes perguntas:
- Quando estou tentando enviar por push um novo viewcontroller na pilha UINavigationController, quem deve fazer esse envio. Qual classe / arquivo no meu código é o local correto?
- Quando quero afetar alguns dados (valor de um iVar) em um dos meus UIViewControllers quando estou em um UIViewController diferente , qual é a maneira "certa" de fazer isso?
- Considere que só podemos ter um delegado definido por vez em um objeto, como seria a implementação quando o palestrante disser "Definir uma interface genérica para observadores (como delegação)" . Um exemplo de pseudocódigo seria muito útil aqui, se possível.