2012-08-13 5 views

risposta

45

Si dovrebbe extern la stringa nell'intestazione, e quindi definire la stringa per l'attuazione.

//ClassA.h 
extern NSString * const kMyConstant; 

//ClassA.m 
NSString * const kMyConstant = @"my constant string"; 

//ClassB.h/m 
#import "ClassA.h" 

... 
    NSLog(@"String Constant: %@", kMyConstant); 
12

È necessario rimuovere static - che specifica che kMyConstant è visibile solo nei file collegati con questo.

Poi, dichiarare (al contrario di definire) la stringa nel colpo di testa di Classe A:

extern NSString * const kMyConstant; 

e importazione che intestazione ovunque si desidera utilizzare questa stringa. La dichiarazione extern indica che esiste uno NSString * const con il nome kMyConstant il cui archivio viene creato in un altro luogo.

Se la definizione statica è già nell'intestazione, è necessario spostarlo altrove (in genere il file di implementazione). Le cose possono essere definite solo una volta e se cerchi di importare un file che definisce una variabile, otterrai un errore del linker.

4

Se è statico, non è possibile (questo è ciò che la parola chiave statica è per).

Se semplicemente dichiararlo come una variabile globale, tuttavia, si può fare qualcosa di simile:

// ClassA.m 

NSString *const str = @"Foo"; 

// ClassB.m 

extern NSString *const str; 

NSLog(@"str is: %@", str);