2014-10-29 13 views
5

Abbiamo una classe WayPoint. Ma ad un certo punto, abbiamo deciso di rinominare la classe in Placemark. Tuttavia, non vogliamo davvero cambiare il nome della classe perché comporterà molte modifiche del codice esistente. Pertanto, ho aggiunto una riga di typedef nella parte inferiore del file di intestazione e iniziare a utilizzare Placemark in qualsiasi nuovo codice per sempre.Ridefinizione come un diverso tipo di simbolo in Objective-C

@interface WayPoint : _WayPoint 
@end 
typedef WayPoint Placemark; 

Ma c'è ancora una cosa che non capisco. Se provo ad usare la definizione diretta in qualche altro file di intestazione. Posso utilizzato solo:

@class WayPoint; 

Se uso:

@class Placemark; 

otterrò il messaggio di errore:

Ridefinizione di 'segnaposto' come un diverso tipo di simbolo

Perché?

+1

Interessante domanda, la mia risposta fornisce alternative, bot non risponde alla domanda così com'è. Ho alcune ipotesi, ma non sono sicuro di postarle qui. Sono curioso anche dei dettagli di basso livello. –

risposta

6

Non so perché non è possibile utilizzare le funzioni di refactoring di Xcode (Simple Rename lo rende veloce e facile). Ma se vuoi davvero farlo puoi usare qualcosa di meglio allora typedef:

@compatibility_alias Placemark WayPoint 
+1

Il motivo è che questa classe viene generata automaticamente da Core Data. Non sono sicuro se sia sicuro rifattorizzarlo. Ma buon punto. Darei un'occhiata a questo. –

+1

@YuchenZhong È possibile, supponiamo che aggiorni anche la classe nelle impostazioni di accesso. La ricerca rapida fornisce questo: http://stackoverflow.com/a/1359960/1032151 –

5

Perché typedef Placemark è un alias e si sta tentando di utilizzarlo come un codice categoria .

Così errore indica chiaramente Ridefinizione di 'segnaposto' come un diverso tipo di simbolo il che significa che il nome della classe e typedef alias sono simbolo diverso.

+0

typedef WayPoint Placemark; non è un oggetto, è solo un alias di WayPoint. –

+0

Sono stati corretti grazie –

Problemi correlati