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'
字符不起作用。
有谁知道如何克服这个问题?
答案 0 :(得分:1)
“\ n”不是“格式化字符”:编译器将其转换为适当的代码;字符串NEVER包含“\”和“n”字符。
因此,如果您的字符串来自未由(Objective-)C(++)编译器编译的源,则“\ n”将只是两个字符。没有什么能把它们变成换行符,除非你自己用
之类的东西做NewString=[MyString stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
注意两个不同的字符串:在第一种情况下,“\”阻止编译器执行\ n - >换行转换,而第二个字符串将是实际的换行符。
关于非文字格式字符串的警告有点无意义;我还没有找到摆脱那个的好方法(现在,我只是完全禁用它,在clang ++> = 4.0上使用-Wno-format-nonliteral)。