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]);

代わりは。

追伸:あれ

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

不必要で醜いです。NSLog にはフォーマット文字列処理が組み込まれているので、それを使用してください!

于 2012-07-15T16:27:16.403 に答える