2016-11-06 15 views
0

まず、私はこのコミュニティから私を引き抜くのにあなたの助けを借りてSOコミュニティの皆さんに感謝します。NSManagedObjectsからNSDecimalNumber.addingが認識できないセレクタの問題に遭う

私のアプリはランタイムエラーを起こし、エラーの原因となった行を分離しました。

私は2つのNSDecimalNumber変数が.addingメソッドを使用追加しようとすると、私はこの「認識されていないセレクタがインスタンスに送信された」エラーが表示さ:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber decimalNumberByAdding:]: unrecognized selector sent to instance 0x608002c361a0'

を、私はこの問題を試してみて、デバッグするためにダミーNSDecimalNumber変数を作成しました、追加するとうまくいくように見えます。しかし、NSDecimalNumber変数を持つNSManagedObject変数(resultおよびnewTransaction)を使用すると、このエラーが発生します。以下は

これらの問題を引き起こしているコードです:

//Testing with dummy variables 
let a1 = NSDecimalNumber(decimal: 5.2) 
let a2 = NSDecimalNumber(decimal: 10.8) 

print ("a1: \(a1), a2: \(a2)")   //a1: 5.2, a2: 10.8 

let a3 = a1.adding(a2) 

print ("a3: \(a3)")     //a3: 16 
//Great, everything above works fine. 

//Now let's try using my NSManagedObjects, which were defined in another section 
let a = result.netChange    //result.netChange is of class NSDecimalNumber 
let b = newTransaction.amount   //newTransaction.amount is of class NSDecimalNumber 

print ("a: \(a), b: \(b)")    //a: 444.12, b: 22.23 

let c = a.adding(b)     //<---This is where the app crashes 

print ("c: \(c)")      //Does not print, as the app has stopped 

私の質問:なぜ私のダミー変数が私のNSManagedObject変数はできませんが、お互いに追加することができますか?

もう一度おねがいします!

+1

コアデータモデルインスペクタでプロパティを「小数」として定義しましたか? 'print(type(of:result.netChange))'とは何を表していますか? –

+0

@MartinR「result.netChange」と「newTransaction.amount」の両方に「__NSCFNumber」が表示されます –

+0

@MartinRこれであなたがどこに向かうのかがわかります。コアデータモデルのインスペクタを更新しました。変数はDecimal型です(以前はDouble型でした)。これで問題は解決しました。ご協力いただきありがとうございます!あなたの答えにどのように投票するのですか? –

答えて

1

"Double"タイプのコアデータプロパティは管理オブジェクトコンテキストにNSNumberとして格納されます。アクセサメソッドが実行時に動的に で作成されるため、 NSManagedObjectサブクラスの型を変更するだけでは不十分です。あなたのコードは、をコンパイルしますが、変数がNSNumberないNSDecimalNumberであるため、実行時 でクラッシュします。

ソリューションは、コアデータモデル インスペクタには「進」タイプを設定することです。

+0

これは私の問題を解決しました - ありがとう@MartinR –

関連する問題