替换 NAN 值以避免崩溃
Replace NAN value in order to avoid Crash
我正在使用 HighChart 库 (Pie-chart) 绘制饼图。
在将数据传递到图表时,我的代码是这样的:
pie.data = [NSMutableArray arrayWithObjects:@{
@"name": @"New Jersey",
@"y": self->numPlusNJ
},
@{
@"name": @"Miami FLG",
@"y": self->numPlusMiamiFLG
},
@{
@"name": @"Chicago",
@"y": self->numPlusChicago
},nil];
其中像 self->numPlusNJ 这样的值是 NSNumber。
有时在计算之后,像 0(零)这样的值会出现在 NSNumbers 中,并将这些值作为 NAN。
在那些情况下,我在绘制饼图时遇到此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid number value (NaN) in JSON write'.
我试过像这样用 0 替换 NAN 值:
if(isnan([self->numRPercentNJ doubleValue])){self->numRPercentNJ = 0;}
但在那种情况下,我无法在字典对象中插入 nil。
所以,目前我不确定如何用某些东西替换这个 NAN 值以避免崩溃。
假设您的数字(numPlusMiamiFLG
等)是当前 class 的属性,我建议为每个数字实现一个访问器:
- (NSNumber *)numPlusMiamiFLG
{
// Check if NaN
if ([[NSDecimalNumber notANumber] isEqualToNumber: _numPlusMiamiFLG] {
return [NSNumber numberWithDouble:0]; // Or whatever default
} else {
return _numPlusMiamiFLG;
}
}
如果您得到 nil
/NaN
,您可能没有正确初始化您的号码。所以我会仔细检查它们。
另请注意,->
不应在 Objective-C class 上使用。 As seen in this SO question.
我正在使用 HighChart 库 (Pie-chart) 绘制饼图。 在将数据传递到图表时,我的代码是这样的:
pie.data = [NSMutableArray arrayWithObjects:@{
@"name": @"New Jersey",
@"y": self->numPlusNJ
},
@{
@"name": @"Miami FLG",
@"y": self->numPlusMiamiFLG
},
@{
@"name": @"Chicago",
@"y": self->numPlusChicago
},nil];
其中像 self->numPlusNJ 这样的值是 NSNumber。 有时在计算之后,像 0(零)这样的值会出现在 NSNumbers 中,并将这些值作为 NAN。 在那些情况下,我在绘制饼图时遇到此错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid number value (NaN) in JSON write'.
我试过像这样用 0 替换 NAN 值:
if(isnan([self->numRPercentNJ doubleValue])){self->numRPercentNJ = 0;}
但在那种情况下,我无法在字典对象中插入 nil。
所以,目前我不确定如何用某些东西替换这个 NAN 值以避免崩溃。
假设您的数字(numPlusMiamiFLG
等)是当前 class 的属性,我建议为每个数字实现一个访问器:
- (NSNumber *)numPlusMiamiFLG
{
// Check if NaN
if ([[NSDecimalNumber notANumber] isEqualToNumber: _numPlusMiamiFLG] {
return [NSNumber numberWithDouble:0]; // Or whatever default
} else {
return _numPlusMiamiFLG;
}
}
如果您得到 nil
/NaN
,您可能没有正确初始化您的号码。所以我会仔细检查它们。
另请注意,->
不应在 Objective-C class 上使用。 As seen in this SO question.