"Ridefenizione della" categoria "come un diverso tipo di simbolo" e conflitto con i nomi delle classi di runtime di OBJC

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

  •  25-08-2022
  •  | 
  •  

Domanda

Ho una lezione in Objective-C:

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

Tutto era buono e Ho usato questa classe senza problemi in 3 diversi progetti.

Una volta che ho deciso di creare un obiettivo di test per un progetto. Quindi è avvenuta la cosa strana: il compilatore si rifiuta di compilare con questo errore:

Redefenition of 'Category' as a different kind of symbol

Ha anche indicato runtime.h insieme a

typedef struct objc_category *Category;

Bene, è ragionevole.

Tuttavia, non riesco a capire perché mi abbia permesso di usare questa classe prima e qual è la differenza tra target originale e target di prova. Ho controllato Deploy target, iOS SDK, tutte le macro, percorsi di intestazione, #import <objc/runtime.h> E le classi in entrambi gli obiettivi: sono quasi gli stessi.

Non voglio refactoring del nome di questa classe a causa dell'utilizzo nei progetti multipli, quindi quale può essere la ragione di un tale comportamento?

È stato utile?

Soluzione

Dovresti refactoring comunque il nome di questa classe, per evitare tali collisioni in futuro. E sarà meno doloroso farlo prima piuttosto che dopo.

È probabile che tu importi un file che importa <objc/runtime.h> ad un certo punto. Poiché la questione di quale sia la differenza tra il target di prova e il target normale, sul test Xcode funziona iniettando i simboli su un pacchetto. Potrebbero esserci alcune differenze nello stripping del codice e nella visibilità dei simboli che potrebbero spiegare questo tipo di errore.

Nessuna sorpresa Apple consiglia di prefiggere le classi con 2 o 3 lettere

Altri suggerimenti

Anche se dovresti fare quello che dice @Olotiar nella sua risposta, c'è una soluzione rapida.

Vai al tuo progetto Crea impostazioni, Cercare "Abilita moduli (C e Objective-C)"E impostare il valore su NO.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top