输出格式化的NSString

时间:2012-08-15 07:08:11

标签: objective-c nsstring formatting

UIAlertView *message = [[UIAlertView alloc] initWithTitle:[[LanguageManager sharedLanguageManager] get:@"Notice"]
                                                  message:[NSString stringWithFormat:[[LanguageManager sharedLanguageManager] get:@"Notice_Text"]]
                                                 delegate:nil
                                        cancelButtonTitle:[[LanguageManager sharedLanguageManager] get:@"Close"]
                                        otherButtonTitles:nil];

嗨,让我解释一下上面的代码。基本上它通过我的LanguageManager单例类调用从UIAlertView读取数据的.plist。 LanguageManager get函数基本上返回NSString*。我知道我应该使用NSLocalizedString课程,但我现在已经使用这个课程一段时间了,所以我决定坚持下去。

我的问题在于“message:”参数。我试图读取的字符串包含格式字符,如\n,但它输出不正确,并且在打印时显示为\n而不是换行符。我也得到“格式字符串不是字符串文字”警告。应用程序的其他部分使用类似的方法返回包含%d%f的字符串,但只有'\n'字符不起作用。

有谁知道如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

“\ n”不是“格式化字符”:编译器将其转换为适当的代码;字符串NEVER包含“\”和“n”字符。

因此,如果您的字符串来自未由(Objective-)C(++)编译器编译的源,则“\ n”将只是两个字符。没有什么能把它们变成换行符,除非你自己用

之类的东西做
NewString=[MyString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];

注意两个不同的字符串:在第一种情况下,“\”阻止编译器执行\ n - >换行转换,而第二个字符串将是实际的换行符。

关于非文字格式字符串的警告有点无意义;我还没有找到摆脱那个的好方法(现在,我只是完全禁用它,在clang ++> = 4.0上使用-Wno-format-nonliteral)。