2009-05-08 13 views
0

NSDecimalNumberをドル値($ 1.50)としてフォーマットしたいが、Imがクラッシュする。iPhone NSNumberFormatterクラッシュ

これは私の方法である:

+(NSString*) formatPriceForUser:(NSDecimalNumber*)dPrice{ 

NSNumberFormatter *formatter; 


if (!formatter) { 
    formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    [formatter setMaximumIntegerDigits:6]; 
    [formatter setMaximumFractionDigits:2]; 
} 
NSString* str = [formatter stringFromNumber:dPrice]; 
return str; 
} 

クラッシュがstringFromNumberの呼び出しで発生します。

私は間違っていますか?

ありがとうございます。

あなたはローカル変数formatterを初期化していないので、それはどんなゴミで初期化されたばかりだGonso

+0

コンソールでエラーが表示されますか? – Tacoman667

答えて

5

は、スタック上に残され、初期if (!formatter)テストが失敗しています。 C/C++/Objective-Cでは、スタック変数は自動的にゼロに初期化されません。

static NSNumberFormatter *formatter = nil; 

はまた、あなたがすべての呼び出しのためにそれを再初期化を避けるようstaticとしてそれを宣言することで、それは、関数の呼び出し間で保持されますのでご注意:この修正は、明示的にformatternilに初期化することです。

+0

静的変数* do *は実際には(C99のように)nilに初期化されます。ローカル変数だけがそうではありません。修正は単に静的として宣言するか、毎回新しいフォーマッタを使用する(これにより初期化の必要性がなくなります)。 –

関連する問題