Pergunta

Eu tenho dois controles no meu arquivo Interface Builder, e cada um desses controles eu criei uma classe delegado separado no código (Control1Delegate e Control2Delegate). Eu criei dois "objetos" no construtor de interface, fez desse tipo, e ligados os controles para eles como delegados. Os delegados funcionar muito bem. Meu problema é que eu preciso para compartilhar informações a partir de um delegado para o outro delegado, e eu não sei como.

Qual é a melhor maneira de fazer isso? Combine os dois delegados em uma classe, ou de alguma forma acessar uma terceira classe que eles podem ler? Desde que eu não estou realmente inicializar a qualquer classe no meu código, eu não tenho certeza de como obter uma referência à instância real do mesmo (se houver uma instância real dele), ou até mesmo acessar a classe "main" que o projeto veio com.

Foi útil?

Solução

Você pode adicionar pontos de venda a partir de qualquer delegado para o outro delegado. Há duas maneiras de adicionar uma saída para um objeto no IB (supondo que você está usando o Xcode / IB versão 3.0 ou posterior:

  1. Se você não tiver gerado o código para suas classes de delegados ainda, selecionar o delegado desejado, em seguida, abra a aba "Objeto Identidade" no Inspetor de IB. Adicionar a "tomada de Classe" do tipo NSObject. Você deve então ser capaz de definir esta nova saída para o outro delegado. Claro que você terá que gerar o código para a classe de delegado e adicionar os arquivos de origem gerados para seu projeto Xcode antes de poder carregar o nib.

  2. Se você já tiver gerado o código para a classe de delegado (ou adicionado um NSObject para o seu NIB e definir sua classe para uma classe existente em seu projeto Xcode), adicione uma variável de instância para a classe de delegado:

    IBOutlet id outletToOtherDelegate;

    Enquanto seu projeto Xcode é aberto (como indicado pela bolha verde no canto inferior esquerdo da janela do seu NIB), IB irá detectar automaticamente o novo mercado e permitem que você atribuí-la a outro objeto de delegação em seu NIB .

Cocoa conecta automaticamente estas tomadas no tempo de carregamento NIB. Uma vez awakeFromNib é chamado em instâncias de seus objetos de delegado, você pode assumir que todos os outros objetos no NIB ter sido instanciado e todas as tomadas foram conectados. Você não deve assumir uma ordem em chamadas para awakeFromNib, no entanto.

Outras dicas

Eu acho que você pode criar pontos de venda em cada um e cross-aprisioná-los de modo a que cada um tem os mesmos dados o tempo todo. Se há um modelo de objeto que eles precisam compartilhar, isso é muito arrumado. Eu realmente não sei como fazer isso; Eu acho que eu vi em um iPhone tutorial uma vez!

Eu não tenho o meu Mac na minha frente momento desde que eu estou no trabalho, mas seria possível vincular uma instância de um delegado a um membro de outro delegado? Isto seria semelhante a uma ligação NSArrayController para um membro de outra classe de controlador, por exemplo.

No entanto, dependendo do que as classes de delegado estão fazendo, se as tarefas são semelhantes I provavelmente apenas combiná-los em vez de classe. Isso eliminaria o problema completamente.

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