2012-11-20 83 views
1

我宣佈類似下面Accesing全局變量給出鏈接錯誤目標C

extern NSString *name; 
@interface viewcontrollerOne{} 
在實現文件

我正在訪問一個全局變量在一些方法一樣

-(void)someMethod 
{ 
name = @"hello"; 
} 

一個全局變量,但這是給鏈接器錯誤。

"name", referenced from: -[viewcontrollerOne someMethod] in viewcontrollerOne.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

+0

請訪問以下網頁 的http:// stackoverflow.com/questions/5026083/objective-c-linking-error-with-extern-variable – svrushal

回答

2

以下內容只是一個聲明:

extern NSString * const name; // << side note: this should typically be const 

它聲明有一個名爲nameNSString*的象徵。它不創建存儲。

爲此,您需要提供name的定義。要做到這一點,添加以下到您的m文件:

NSString * const name = @"hello"; 

如果你想將其設置在一個實例方法,如在你的榜樣,那麼你可以把它聲明:

MONFile.h

extern NSString * name; 

定義它:

MONFile。 m

NSString * name = 0; 

然後你可以在你的實例方法中寫入name = @"hello";

+0

謝謝你......它的工作原理是我沒有定義它。 –

+0

@iVishal不用客氣 – justin

0

extern最初用於創建contants。如果你想創建一個全局變量字符串,你可以做下列方式:

.H

+ (void)setName:(NSString*)name_in; 

+ (NSString*)name; 

.M

NSString* gName; 

@implementation ... 

+ (void)setName:(NSString*)name_in{ 
    gName = name_in; 
} 

+ (NSString*)name{ 
    return gName; 
}