请考虑以下代码:
int count = 1;
NSString* format = count == 1 ? @"One %2$@" : @"%1$d %2$@s";
NSString* result = [NSString stringWithFormat: format, count, @"Bread"];
count
不是1
,结果有效:
2 Breads
4 Breads
但count
为1
,则会导致EXC_BAD_ACCESS
NSLog(@"%@", [NSString stringWithFormat:@"One %2$@", 1, @"Bread"]);
Xcode编译器抱怨上面的代码:
Data argument not used by format string
我知道这个错误的原因。 但是,我的方法(动态格式可能会跳过一些数据)也很有用。如果它有用的话。
有没有解决方法呢?
答案 0 :(得分:2)
这看起来像[NSString stringWithFormat:]
不支持位置参数。[NSString stringWithFormat:]
中的错误。
一种解决方法(hack)是使用普通printf
函数并将结果转换为
NSString
:
char *format = count == 1 ? "One %2$s" : "%1$d %2$ss";
char *tmp;
asprintf(&tmp, format, count, "Bread");
NSString *result = [NSString stringWithUTF8String:tmp];
free(tmp);
但正确的解决方案是创建一个" Localizable.strings"文件 语言复数规则,如中所述 "Handling Noun Plurals and Units of Measurement" 在国际化和本地化指南中。
另见"String Localization" 用于文档和示例。
答案 1 :(得分:0)
替换: -
NSLog(@"%@", [NSString stringWithFormat:@"One %2$@", 1, @"Bread"]);
以下修改: -
NSLog(@"%@", [NSString stringWithFormat:@"%@,%d,%@",@"One %2$@", 1, @"Bread"]);