代码之家  ›  专栏  ›  技术社区  ›  Shivam Tripathi

更换NaN值以避免碰撞

  •  0
  • Shivam Tripathi  · 技术社区  · 6 年前

    我正在使用海图库绘制饼图( 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(零)这样的值以nsnumber形式出现,它将这些值取为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值以避免崩溃。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Wesley McCloy    6 年前

    假设你的数字( numPlusMiamiFLG 等等)是当前类的属性,我建议为每个类实现一个访问器:

    - (NSNumber *)numPlusMiamiFLG
    {
        // Check if NaN
        if ([[NSDecimalNumber notANumber] isEqualToNumber: _numPlusMiamiFLG] {
            return [NSNumber numberWithDouble:0]; // Or whatever default
        } else {
            return _numPlusMiamiFLG;
        }
    }
    

    如果您正在获取 nil / NaN . 所以我会再检查一遍。

    还要注意, -> 不应该用于Objective-C类。 As seen in this SO question .