categoria de classe biblioteca Objective-C estático, método de substituição não funciona

StackOverflow https://stackoverflow.com/questions/1269425

  •  13-09-2019
  •  | 
  •  

Pergunta

Eu estou usando Three20 para o iphone e eu estou tentando mudar o que um método faz dentro dele usando uma categoria de classe. Ele compila bem, mas eu nunca chegar ao ponto de ruptura na mesma.

Estou assumindo uma categoria de classe afeta todas as instâncias da classe, então eu não tenho que recompilar a biblioteca estática para que ele funcione.

Eu também sei que a classe que estou usando para a categoria está sendo visto, porque se eu adicionar um 'x' ao final do nome da classe quando eu interface e implementar a categoria compilador falhar.

Qualquer orientação aqui é muito apreciado.

Foi útil?

Solução

Como é apontado aqui , você vai precisar da opção -all_load a ser definido no da sua aplicação Outras Bandeiras Linker, a fim de ter categorias estar ligado contra bibliotecas estáticas no iPhone oS 3.0. -ObjC deve fazer o truque bem, mas ele não está funcionando no SDK atual. Como do compilador LLVM no Xcode 4.2, que reparou o erro vinculador que impedia a outra bandeira Linker de -ObjC de funcionar corretamente, então você não precisa usar -all_load (que tem alguns efeitos colaterais desagradáveis). -ObjC deve ser tudo que você precisa para obter categorias para ser puxado para dentro de sua biblioteca estática.

Esta pode estar contribuindo para o seu problema, embora eu acho Three20 requer essas bandeiras vinculador a ser definido para ele para vincular adequadamente com o seu pedido, em primeiro lugar, então você já pode ter essas bandeiras no lugar.

Outras dicas

Quando duas categorias substituir o mesmo método na mesma classe no mesmo binário, não é definido que override terá precedência. Para melhores resultados, criar uma subclasse e, em seguida, substituir o método sobre isso. Alternativamente, uma vez Three20 é Apache-licenciado, você pode fazer sua mudança na própria biblioteca.

Eu tenho um projeto que está ligando para uma biblioteca estática e sim a bandeira -all_load é necessária quando a instalação do dispositivo com o SDK 3.0. -ObjC era tudo o que era necessário para o simulador.

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