iPhone NSNumberFormatter崩溃

0 iphone crash

我想将NSDecimalNumber格式化为美元值($ 1.50),但我遇到了崩溃.

这是我的方法:

+(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; 
}
Run Code Online (Sandbox Code Playgroud)

崩溃发生在stringFromNumber调用上.

我究竟做错了什么?

提前致谢.

Gonso

Ada*_*eld 5

你没有初始化局部变量formatter,所以它被初始化了堆栈上剩下的任何垃圾,并且初始if (!formatter)测试失败了.在C/C++/Objective-C中,堆栈变量不会自动初始化为零.修复方法是显式初始化formatternil:

static NSNumberFormatter *formatter = nil;
Run Code Online (Sandbox Code Playgroud)

另请注意,通过声明它static,它将持续跨函数调用,因此您不必为每次调用重新初始化它.