我似乎总是遇到与NSDecimalNumber麻烦!今天,我得到这个错误:

  

"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFNumber decimalNumberByDividingBy:withBehavior:]: unrecognized selector sent to instance 0xd1fb10'"

下面是错误的来源:

- (void)setUpInstance {
    static NSDecimalNumberHandler* roundingBehavior = nil;
    if (roundingBehavior == nil) {
        roundingBehavior = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundDown scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
    }   
    NSDecimalNumber *amount = viewController.aDecimalNumber;
    NSDecimalNumber *actualValue = viewController.anotherDecimalNumber;
    integralPortion = [amount decimalNumberByDividingBy:actualValue withBehavior:roundingBehavior];
    ...
}

该文档定义方法为:

-(NSDecimalNumber*)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber
                                withBehavior:(id<NSDecimalNumberBehaviors>)behavior

我不能正确地解释“(id<NSDecimalNumberBehaviors>)behavior”的说法。是不是随便什么目标,只要它符合NSDecimalNumbersBehaviors协议?

什么我做错了吗?代码的例子是非常有帮助的。

快乐星期五!

有帮助吗?

解决方案

  

今天,我得到这个错误: “终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因: '*** - [NSCFNumber decimalNumberByDividingBy:withBehavior:]:无法识别的选择发送到实例0xd1fb10'”

这意味着你正在发送该消息到纯的NSNumber(NSCFNumber幕后)。您只能将其发送到NSDecimalNumber。

请注意,您如何声明变量是不相关的。你可以声明amount作为NSString *amount,你会得到完全相同的异常,包括NSCFNumber类名,因为它是一个例外,它发生在工作时间。 (你会的,当然,也得到了的编译时间的警告有关的NSString和NSDecimalNumber不是可以互换的。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top