转换字符串时,NSNumberFormatter没有返回合理的答案

时间:2012-07-15 16:16:25

标签: objective-c nsnumberformatter

我有一个UITextField,我试图使用带有NSNumberFormatterDecimalStyle的NSNumberFormatter将文本字段转换为NSNumber来初始化一个对象。

然而,当我这样做时,我无法从转换中获得任何明智的结果。出于这个例子的目的,我用一个字符串替换了UITextField,但我仍然得到奇怪的结果。我相信我正在做一些愚蠢的事,但任何帮助都会受到赞赏。

//NSString * boardNumberText = self.txtBoardNumbs.text;
NSString * boardNumberText = @"42";

NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];

NSNumber * boardNumber = [formatter numberFromString:boardNumberText];

if ([boardNumber isEqual:nil]) {
    NSLog(@"Number was null");
}
NSLog(@"Number was not null");

[self.board setNumber:boardNumber];

NSLog(boardNumberText);
NSLog([NSString stringWithFormat:@"%d", boardNumber]);
NSLog([NSString stringWithFormat:@"%d", self.board.number]);

我运行时从日志文件中获得的输出是:

2012-07-15 16:54:26.564 CoreDataDev[16123:fb03] Number was not null
2012-07-15 16:54:26.564 CoreDataDev[16123:fb03] 42
2012-07-15 16:54:26.565 CoreDataDev[16123:fb03] 135821152
2012-07-15 16:54:26.565 CoreDataDev[16123:fb03] 135820272

2 个答案:

答案 0 :(得分:0)

您不能只使用整数格式说明符将NSNumber记录到控制台,因为NSNumber是一个包装器对象。此外,NSLog采用格式字符串,因此您无需使用stringWithFormat:。试试这个:

NSLog(@"%d", [boardNumber intValue]);

答案 1 :(得分:0)

使用

NSLog(@"%d", boardNumber);

错误:它打印boardNumber指针的内存地址(NSNumber实例本身)。使用

NSLog(@"%d", [boardNumber intValue]);

代替。

P上。 s。:那个

NSLog([NSString stringWithFormat:...]);

是不必要和丑陋的; NSLog具有内置格式字符串处理功能, 使用它!