2011-09-03 65 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; 
相关问题