"Redefenição de 'categoria' como um tipo diferente de símbolo" e conflito com os nomes de classes de tempo de execução da Objc

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

  •  25-08-2022
  •  | 
  •  

Pergunta

Eu tenho uma aula no Objective-C:

@interface Category : NSObject
{
// ...
}

Tudo era bom e Eu usei essa classe sem problemas em 3 projetos diferentes.

Depois de decidir criar o destino de teste para um projeto. Então a coisa estranha ocorreu: o compilador se recusa a compilar com este erro:

Redefenition of 'Category' as a different kind of symbol

também apontou para runtime.h com

typedef struct objc_category *Category;

Bem, é razoável.

No entanto, não consigo entender por que me permitiu usar essa classe antes e qual é a diferença entre o destino original e o destino de teste. Eu verifiquei Deploy target, iOS SDK, todas as macros, caminho do cabeçalho, #import <objc/runtime.h> e aulas em ambos os alvos - estes são quase os mesmos.

Não quero refatorar o nome desta classe por causa de usá -lo em projetos múltiplos, então qual pode ser o motivo de esse comportamento?

Foi útil?

Solução

De qualquer forma, você deve refatorar o nome desta classe, para evitar essas colisões no futuro. E será menos doloroso fazê -lo mais cedo ou mais tarde.

É provável que você importe um arquivo que importe <objc/runtime.h> em algum ponto. Como a questão de qual é a diferença entre o alvo de teste e o alvo regular, no teste Xcode funciona injetando os símbolos em um pacote. Pode haver algumas diferenças na visibilidade de remoção de código e símbolos que podem explicar esse tipo de erro.

Não admira A Apple recomenda prefixar aulas com 2 ou 3 letras

Outras dicas

Embora você deva fazer o que @olotiar diz em sua resposta, há uma solução rápida.

Vá para o seu projeto Construir configurações, procurar por "Ativar módulos (C e Objective-C)"E defina o valor para NÃO.

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