Pergunta

Estou iniciando um projeto que acho que se beneficiaria das ligações (tenho uma tabela de listas de origem, várias visualizações do navegador etc.), mas acho que também seria bastante factível e talvez mais compreensível sem elas. Pela minha experiência limitada, achei as ligações difíceis de solucionar problemas e muito "mágica" (por exemplo, é difícil inserir o log em qualquer lugar para descobrir onde as coisas estão quebrando, tudo funciona ou não).

Essa é apenas a minha inexperiência falando (nesse caso, eu poderia me sentar e passar algum tempo apenas trabalhando na minha compreensão das ligações e espero que as coisas comecem a se tornar mais claras/mais fáceis) ou seria melhor apenas escrever todo o código de cola em um maneira que eu tinha certeza de que conseguia entender e solucionar problemas.

Foi útil?

Solução

Use ligações.

Observe que você devo Siga o padrão MVC para aproveitar ao máximo as ligações. Isso é mais fácil do que parece, como o cacau faz quase tudo para você hoje em dia:

  1. Visão: NSView e subclasses (é claro), NSCell e subclasses, NSWindow e subclasses
  2. Controlador: NSController e subclasses (especialmente NSArrayController)
  3. Modelo: dados principais

Se você não usará dados principais, poderá rolar seus próprios objetos de modelo, mas isso é fácil. A maioria dos métodos desses objetos serão acessadores simples, que você pode simplesmente @synthesize Se você está segmentando o leopardo.

Você geralmente não pode se safar de não escrever nenhum código, mas as ligações podem permitir que você escreva muito pouco código.

Leitura recomendada:

Outras dicas

As ligações podem parecer de natureza mágica. Para entender a magia por trás das ligações, acho que é preciso entender completamente o KVC/KVO. Eu realmente quero dizer minuciosamente.

No entanto, no meu caso (novo no OBJ-C-9 meses), uma vez que recebi ligações KVC/KVO, foi uma emoção. Reduziu significativamente meu código de cola e tornou minha vida significativamente mais fácil. As ligações de depuração tornaram-se um caso de garantir que minhas alterações no valor-chave fossem observáveis. Acho que sou capaz de gastar mais tempo escrevendo o que meu aplicativo deve fazer, em vez de garantir que a visualização reflita os dados.

Eu concordo que as ligações são altamente intimidadoras a princípio.

Minha abordagem geral é começar o máximo possível usando ligações e ver como as coisas vão. No entanto, se um elemento de interface específico começar a se tornar problemático usando ligações, ou mais esforço do que vale a pena, não hesito em voltar ao uso de métodos mais tradicionais (por exemplo, fontes de dados, ações) quando faz sentido. Eu achei que essas coisas podem ser muito difíceis de prever com antecedência, mas acho que favorecer as ligações é melhor a longo prazo, desde que você não fique muito dogmático em ficar com elas em situações em que não fornecem qualquer benefício.

Depois de um tempo, trabalhando com ligações, descobri que não é mágico, pensei que é suficientemente avançada em tecnologia. A depuração de uma interface ligada leva técnicas diferentes de uma interface colada, mas depois de ter essas técnicas, as vantagens em termos de reutilização, manutenção e consistência são significativas.

Parece que eu uso ligações, KVO e métodos de fonte de dados sobre igualmente em meus aplicativos. Realmente depende do contexto. Por exemplo, em um dos meus projetos, uso encadernas em quase todos os lugares, exceto a visualização de contorno da janela principal, o que é complexo o suficiente para que eu não gostaria de tentar encaixá -la em um NStreecontroller. Ao mesmo tempo, também uso o KVO para recarregar os objetos da interface do usuário e rastrear as dependências em meus objetos de modelo.

O importante a ter em mente ao aprender tópicos avançados de cacau, como encadernas ou dados principais, é que você deve entender todas as tecnologias por trás deles; Tudo, desde protocolos de origem de dados, notificações KVO e, portanto, um. Depois de ter experiência suficiente trabalhar com eles para saber como a "mágica" funciona, você poderá integrar as coisas de nível superior ao seu aplicativo com facilidade.

No seu caso específico, você terá que decidir se vale a pena o tempo extra para aprender ligações além do desenvolvimento de seu aplicativo. Se possível, pode beneficiar você desenvolver um protótipo simplificado do seu aplicativo usando ligações, para que você saiba melhor se encaixar nas peças quando iniciar o projeto real.

Minha opinião é que sim, você deve adotar ligações; A tecnologia está bem compreendida e estável agora, e vale a pena fazer pela quantidade de código que você não precisa mais escrever. Quando mudei para as ligações, tive bastante problemas em obter a vida inteira de observar e observar objetos para combinar e com quebras da interface do usuário porque estava observando um objeto válido, mas o incorreto. Depois de ver esses problemas algumas vezes, saber como evitá -los e como identificá -los se aparecerem se tornarem diretos. Ish. Eu ainda desejo traços de "este evento aqui causaram esta atualização aqui" no depurador, mas ainda estou feliz por ter feito a mudança.

Para os curiosos, acabei usando ligações e, depois de alguns dias, eles de repente começaram a "fazer sentido". Então, eu recomendaria definitivamente ir em frente e dedicar um tempo para aprendê -los.

Eu também achei o conselho de Brian Webster bastante útil, pois realmente acabei fazendo um punhado de coisas da maneira antiga, porque as encadernas não podiam fazer o que eu queria ou porque teria sido proibitivamente complicado de fazer o que eu precisava usar usando ligações.

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