0

我有一个 UITextField,我正在尝试使用 NSNumberFormatter 和 NSNumberFormatterDecimalStyle 将文本字段转换为 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
4

2 回答 2

0

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

NSLog(@"%d", [boardNumber intValue]);
于 2012-07-15T16:25:13.023 回答
0

使用

NSLog(@"%d", boardNumber);

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

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

反而。

P.s.:那个

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

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

于 2012-07-15T16:27:16.403 回答