我正在使用最新版本的CorePlot,我遇到了这个错误:
将'NSDecimal'发送到不兼容类型'NSNumber * _Nonnull'的参数
我意识到发生此错误是因为我的应用程序基于使用旧版CorePlot的教程。 This changelog说明了其中一项变化:
更改了所有采用NSDecimal值的公共属性和方法,以取代NSNumber值。在某些情况下,该方法的NSDecimal版本仍然存在,并且添加了一个采用NSNumber值的新版本。
Swift不支持NSDecimal值。使用NSNumber值有几个优点。 Swift根据需要自动将数值桥接到NSNumber。这也减少了使用NSDecimal包装函数的需要,例如CPTDecimalFromDouble()来转换Objective-C中的值。如果特定值需要更高的精度,请使用NSDecimalNumber来维持完整的小数精度。
因此,我知道我的错误是由什么引起的,但我不知道如何解决它。有任何想法吗?这是我的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
CPTGraphHostingView* hostView = [[CPTGraphHostingView alloc] initWithFrame:self.view.frame];
[self.view addSubview: hostView];
CPTGraph* graph = [[CPTXYGraph alloc] initWithFrame:hostView.bounds];
hostView.hostedGraph = graph;
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
[plotSpace setYRange: [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat( 0 ) length:CPTDecimalFromFloat( 16 )]];
[plotSpace setXRange: [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat( -4 ) length:CPTDecimalFromFloat( 8 )]];
CPTScatterPlot* plot = [[CPTScatterPlot alloc] initWithFrame:CGRectZero];
plot.dataSource = self;
[graph addPlot:plot toPlotSpace:graph.defaultPlotSpace];
}
答案 0 :(得分:2)
使用NSNumber个对象代替NSDecimals:
[plotSpace setYRange: [CPTPlotRange plotRangeWithLocation:@0 length:@16]];
[plotSpace setXRange: [CPTPlotRange plotRangeWithLocation:@-4 length:@8]];
如果您需要将NSDecimal
转换为NSNumber
,可以使用NSDecimalNumber
:
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithDecimal:someDecimal];