2016-11-06 5 views
0

먼저,이 커뮤니티에서 나를 빠져 나오려는 SO 커뮤니티의 모든 분들께 감사드립니다.NSManagedObjects의 NSDecimalNumber.adding에서 인식 할 수없는 셀렉터 문제가 발생합니다.

내 앱이 런타임 오류가 발생하여 오류가 발생한 행을 분리했습니다. 나는이 개 NSDecimalNumber 변수가 .adding 방법을 사용하여 추가하려고하면

, 나는이 "인식 할 수없는 선택기 인스턴스로 전송"오류 :

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

나는이 문제를 시도하고 디버그하는 더미 NSDecimalNumber 변수를 만들었습니다 , 그리고 그들은 추가 할 때 잘 작동하는 것처럼 보입니다. 그러나 NSDecimalNumber 변수가있는 내 NSManagedObject 변수 (resultnewTransaction)로 작업 할 때이 오류가 발생합니다.

//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이 아니므로 충돌합니다.

해결 방법은 코어 데이터 모델 속성에서 유형을 "10 진수"로 설정하는 것입니다.

+0

이것은 내 문제를 해결했습니다 - thanks @MartinR –