2012-06-17 3 views
0

대해 이것은 코드이다.
taskId은 다음과 같습니다 1
intTaskId입니다 : 269,303,816
사실에서, 핵심 데이터에 저장되어있는 값은 다음과 같습니다 1 아래KVC 데이터 유형

내 질문입니다 :
1, 내가 왜 NSInteger 잘못된 혼란 스러워요?
2 다른 문제를 피하려면 NSIntegerNSNumber으로 대체해야합니까? NSInteger 단순히 프리미티브 (비 목적)에 대한 입력 typedef (int 등) 인 반면

답변

3

NSNumber
이 목적이다. NSInteger이 아니고 서브 클래스는 NSNumber입니다. Core Data는 숫자를 NSNumber의 인스턴스로 반환합니다. 이상한 NSInteger 값은 NSNumber 유형의 객체를 가리키고 있지만 단지 정수 인 것처럼 인쇄하려고하기 때문에 값을 얻고 있습니다.

문제가 발생하지 않도록 NSIntegerNSNumber으로 대체해야합니다. 또한 다시 내려면 NSInteger하는 NSNumberintValue 방법을 사용할 수 있습니다

NSNumber *objTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"]; 
NSInteger *intTaskId = [objTaskId intValue]; 

당신이 비교하고 싶은 경우는 (동일 너무 이상을보다 작은)이 작업을 수행해야합니다 또는 산술 (당신이 할 수있는 NSNumberNSNumber 또는 NSNumberint 또는 float과 같은 기본 유형으로 추가하십시오.

+0

항상 그렇지는 않습니다 : #if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSUInteger; #else typedef int NSInteger; typedef 부호없는 정수 NSUInteger; #endif – cdelacroix

+0

(형식이 잘못되어 죄송합니다. 코드는 답변에 주석으로 미리 서식이 지정되어 있지 않습니다.) – cdelacroix

+0

여러분 모두 큰 감사를드립니다. 이제 NSNumber 및 NSInteger를 사용하는 방법에 대한 아이디어가 있습니다. – rock