NSLog 打印一个与 NSString 格式不同的字符串
NSLog prints a string different to the NSString with format
这是我真正感到困惑的事情:当我用像这样的两个不同变量的格式初始化一个字符串时
Order *o = [orders objectAtIndex:i];
NSString *line = [[NSString alloc] initWithFormat:(@"%@;%@\n", [o _length], [o _amount])];
然后用
打印出来
NSLog(@"%@", line);
显示如下:
tableviewtest[4812:123250] 200
这是错误的。但是,如果我通过这样做来做同样的事情
NSLog(@"%@;%@\n", [o _length], [o _amount]);
结果是这样的:
tableviewtest[4812:123250] 120cm;200
这就是我希望 line
的样子。为什么会这样?我需要它的格式与 line
相同,以便稍后可以将其写入文本文件。
编辑:
_length
和 _amount
在订单中 @property NSString *_length
-class。 orders
是一个 NSMutableArray
,它将数据存放到 NSTableView
,其中数据与 NSComboBoxes 和 NSTextFields 一起放入。编译器还给出警告:格式字符串不是字符串文字(可能不安全)。
而不是
NSString *line = [[NSString alloc] initWithFormat:(@"%@;%@\n", [o _length], [o _amount])];
,
使用
NSString *line = [NSString stringWithFormat:@"%@;%@\n", [o _length], [o _amount]];
@Schemetrical 是正确的,但不是编译器混淆。它是 C 标准中定义的行为。让我们拥有原始源代码:
NSString *line = [[NSString alloc] initWithFormat:(@"%@;%@\n", [o _length], [o _amount])];
arg 列表来自
(@"%@;%@\n", [o _length], [o _amount])
这是按照 C 标准 6.5.17.. 从逗号运算符构建的表达式。这意味着
@"%@;%@\n", [o _length]
被评估为
((void)@"%@;%@\n")
expr = [o _length]
返回表达式。那么
(expr, [o _amount])
被评估为
((void)expr)
expr = [o _amount])
这是用作单个参数的表达式的结果:
NSString *line = [[NSString alloc] initWithFormat:_amount];
因此整个语句是相当不错的C/Objective-C代码。显示警告的唯一原因是格式 arg 不是常量。 (但这绝对不是问题所在。)
这是我真正感到困惑的事情:当我用像这样的两个不同变量的格式初始化一个字符串时
Order *o = [orders objectAtIndex:i];
NSString *line = [[NSString alloc] initWithFormat:(@"%@;%@\n", [o _length], [o _amount])];
然后用
打印出来NSLog(@"%@", line);
显示如下:
tableviewtest[4812:123250] 200
这是错误的。但是,如果我通过这样做来做同样的事情
NSLog(@"%@;%@\n", [o _length], [o _amount]);
结果是这样的:
tableviewtest[4812:123250] 120cm;200
这就是我希望 line
的样子。为什么会这样?我需要它的格式与 line
相同,以便稍后可以将其写入文本文件。
编辑:
_length
和 _amount
在订单中 @property NSString *_length
-class。 orders
是一个 NSMutableArray
,它将数据存放到 NSTableView
,其中数据与 NSComboBoxes 和 NSTextFields 一起放入。编译器还给出警告:格式字符串不是字符串文字(可能不安全)。
而不是
NSString *line = [[NSString alloc] initWithFormat:(@"%@;%@\n", [o _length], [o _amount])];
,
使用NSString *line = [NSString stringWithFormat:@"%@;%@\n", [o _length], [o _amount]];
@Schemetrical 是正确的,但不是编译器混淆。它是 C 标准中定义的行为。让我们拥有原始源代码:
NSString *line = [[NSString alloc] initWithFormat:(@"%@;%@\n", [o _length], [o _amount])];
arg 列表来自
(@"%@;%@\n", [o _length], [o _amount])
这是按照 C 标准 6.5.17.. 从逗号运算符构建的表达式。这意味着
@"%@;%@\n", [o _length]
被评估为
((void)@"%@;%@\n")
expr = [o _length]
返回表达式。那么
(expr, [o _amount])
被评估为
((void)expr)
expr = [o _amount])
这是用作单个参数的表达式的结果:
NSString *line = [[NSString alloc] initWithFormat:_amount];
因此整个语句是相当不错的C/Objective-C代码。显示警告的唯一原因是格式 arg 不是常量。 (但这绝对不是问题所在。)