2011-04-26 20 views
1

我知道%%方法逃生%,但它不工作:(。在Objective-C

与NSLog的

 NSLog(@"%%5B hello %%5D");

打印

%5B你好%5D

但与NSString

NSString *str = [NSString stringWithFormat:@"%%5B %@ %%5D",@"hello"]; 
NSLog(str);

打印

5个招呼68233204

为什么?

回答

2

这是因为你遗漏了一行代码。在你stringWithFormat:版本,你可能有类似

NSString *str = [NSString stringWithFormat:@"%%5B5%%5D"]; 
NSLog(str); 

问题是你现在已经在字符串中的双解释格式的字符。请记住,NSLog()+[NSString stringWithFormat:]的第一个参数是格式字符串,其中%字符是专门处理的。在这两种情况下,您都可以使用实际格式字符串轻松保留字符串的原始版本(并提前除去重复的%),如

NSLog(@"%@", @"%5B%5D"); 
+2

注意:通过NSLog调用('NSLog(str);')应该总是使用格式说明:'NSLog(@“%@”,str);' – justin 2011-04-26 17:48:46

+0

就是这样!谢谢:D – Daniel 2011-04-26 17:50:43

1

您确实需要使用stringWithFormat:,如果你不打算在任何参数传递,你应该能够只使用

NSString *str = @"%%5B%%5D"; 

但至于“为什么”,你遇到的现象发生,我不确定...尝试传递一个参数,看看它是否仍然发生。也许有一个错误,当没有参数传递?

根据this后您正确地转义它。

String format specifiers document说你也是这么做的。

+0

谢谢您的回答:),但我想通过一个论点。我已更新我的示例。 – Daniel 2011-04-26 17:47:40