私はいつもNSDecimalNumberに問題があるようです!今日、私はこのエラーを取得する:NSDecimalNumberのdecimalNumberByDividingByに関する問題:withBehavior:
ここ
"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プロトコルに準拠している限り、それはただのオブジェクトではありませんか?
私は間違っていますか?コード例はと非常にとなります。
ハッピーフライデー!
NSDecimalNumberで作業していることを確認するにはどうすればよいですか? – Meltemi
viewControllerは作成したクラスですか?もしそうなら、aDecimalNumberがNSDecimalNumberを返すことを確認します(もしそうなら)。それ以外の場合は、decimalNumberWithMantissa:exponent:isNegative:を使用して、取得している値からNSDecimalNumberを作成し、それを処理します。 – smorgan
Meltemi:単純にNSNumberをView Controllerの 'aDecimalNumber'プロパティに割り当てないでください。値を保存して復元する場合は、その格納形式の文字列表現を使用します。 (プロパティリストへのセーブは*機能しません。なぜなら、セーブして復元するのはプレーンなNSNumberのようになり、結果として精度が失われるからです。) –