带间隙的ScatterPlot - [NSNull doubleValue]:发送到实例的无法识别的选择器

时间:2016-04-27 10:06:35

标签: ios objective-c core-plot

我一直在尝试使用此建议在scatterPlot中创建间隙: iOS Scatter core plot with a gap

我想通过创建数据绘制2条垂直线:

NSMutableArray<NSDictionary *> *contentArray = [[NSMutableArray alloc] init];

        [contentArray addObject:@{ @"x": _startPointValue, @"y": _startValue }];
        [contentArray addObject:@{ @"x": _startPointValue, @"y": @5 }];

        //add null points not to link the 2 lines
        [contentArray addObject:@{ @"x": _endPointValue, @"y": [NSNull null] }];
        [contentArray addObject:@{ @"x": _endPointValue, @"y": _endValue }];
        [contentArray addObject:@{ @"x": _endPointValue, @"y": @5 }];

        _verticalLinesData = contentArray;

但我收到错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull doubleValue]: unrecognized selector sent to instance 0x1a0f0e490'

当我用[NSNull null]注释掉这一行时,这些线条被正确绘制(但已连接)。

可能是什么原因。我不在其他地方使用_verticalLinesData(仅在coreplot的数据源方法中)。

编辑: 我的数据源方法:

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
if ( [plot.identifier isEqual:VERTICALLINESPLOTID] ) {
        return _verticalLinesData.count;
    }
    else {
        return 0;
    }
}

-(id)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
    NSString *key = (fieldEnum == CPTScatterPlotFieldX ? @"x" : @"y");
    NSNumber *num = [[NSNumber alloc] init];
   if ([plot.identifier isEqual:VERTICALLINESPLOTID] ) {
        num = _verticalLinesData[index][key];
        num = @([num doubleValue]);
    }
    else {
        num = 0;
    }
    return num;
}

2 个答案:

答案 0 :(得分:1)

您可以直接从_verticalLinesData返回值。删除行num = @([num doubleValue]);,它将按预期工作。

答案 1 :(得分:0)

你不应该使用&#39; [NSNull null] &#39;在字典键中,值对。

当您尝试将此空值转换为双值

时发生崩溃

所以你有两个选择

  1. 避免插入&#39; [NSNull null] &#39;。相反,你可以插入 @( - 1); 或
  2. 您可以在双倍/浮动值时检查空值