0
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从 a 读取的数据。.plistLanguageManager 的 get 函数基本上返回一个NSString*. 我知道我应该使用这个NSLocalizedString类,但我已经使用这个类有一段时间了,所以我决定坚持下去。

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

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

4

1 回答 1

1

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

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

NewString=[MyString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];

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

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

于 2012-08-15T08:47:33.820 回答