麻烦NSDecimalNumber的decimalNumberByDividingBy:withBehavior:
-
19-09-2019 - |
题
我似乎总是遇到与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不是可以互换的。)
不隶属于 StackOverflow