2011-09-03 71 views
0

我有一個常量定義爲:字符串是否定義爲不是NSStrings的常量?

#define BEGIN_IMPORT_STRING @"Importing Hands!"; 

,但我得到一個錯誤,當我試圖用Concat的:

NSString *updateStr = [NSString stringWithFormat:@"%@%@", BEGIN_IMPORT_STRING, @" - Reading "]; 

,如果我有一個字符串

更換這不會發生
NSString *updateStr = [NSString stringWithFormat:@"%@%@", @"foo", @" - Reading "]; 

或本地串

NSString *temp = @"foo"; 
NSString *updateStr = [NSString stringWithFormat:@"%@%@", temp, @" - Reading "]; 

回答

4

您需要從#define刪除分號:

#define BEGIN_IMPORT_STRING @"Importing Hands!" 

編譯器,生成的線看起來是這樣的:

NSString *updateStr = [NSString stringWithFormat:@"Importing Hands!";, @" - Reading "]; 
+0

你只是重複我的回答=) – Nekto

+0

我們張貼在同一時間... – Wevah

4

更換

#define BEGIN_IMPORT_STRING @"Importing Hands!"; 

#define BEGIN_IMPORT_STRING @"Importing Hands!" 

這是因爲編譯器在你的情況取代的BEGIN_IMPORT_STRING所有出現的@"Importing Hands!";

1

如果您使用

NSLocalizedString(@"Importing Hands!", @"Message shown when importing of hands starts"); 

我把它作爲一個答案,因爲這看起來像你不想去和重做你的代碼。

2

除了公認的答案(刪除分號),注意:

  • @"Foo"一個NSString。你甚至可以給它發送消息。
  • #define FOO @"Foo"是一個預處理宏,而不是一個常量。這是一個打字快捷鍵。

雖然宏不是一種不常用的方法來避免重新輸入相同的字符串,但它們是一個不幸的保留。基本上,他們正在玩不再需要的遊戲。

對於重複的字符串,我更喜歡:

static NSString *const Foo = @"Foo; 

這個定義的const部確保了指針被鎖定,以便Foo不能進行指向一個不同的對象。

static部分將範圍限制爲文件。如果你想從其它文件訪問它,取出static,並添加以下聲明,以你的頭文件:

extern NSString *const Foo; 
相關問題