2011-08-12 3 views

답변

3

코어 데이터는 NSNumbers 허용됩니다. 그러나 사용자 정의 getter 및 setter를 작성하여 NSInteger 속성을 사용할 수 있습니다. mogenerator은 자동으로이를 수행하는 훌륭한 도구입니다. 모든 엔티티의 기본 속성을 사용하여 클래스를 생성합니다.

+5

또한 Xcode의 현재 버전 (이 주석의 4.3.2)에서 NSManagedObject 서브 클래스를 생성 할 때 "원시 데이터 형식에 대한 스칼라 속성 사용"을 선택하면 컴파일러에서 "그냥 알기"만합니다. 합성 접근자는 NSNumber와 적절한 스칼라로 승격/강등 시키십시오. 예를 들어 "Integer 32"는 생성 된 .h 파일에서 int32_t로 선언되며 단순히 코드의 속성에 정수를 할당 할 수 있습니다. –

2

번호 NSInteger은 개체가 아닌 긴 정수의 typedef입니다.

실제 구현 :

#if __LP64__ || NS_BUILD_32_LIKE_64 
    typedef long NSInteger; 
    typedef unsigned long NSUInteger; 
#else 
    typedef int NSInteger; 
    typedef unsigned int NSUInteger; 
#endif 

NSNumber 클래스 다음 속성 목록과 코어 데이터로 저장 될 수있는 개체로 프리미티브 타입 (int, float 등)의 밀봉을 허용한다.

예 :

float pi = 3.1415; 
NSNumber *piNumber = [NSNumber numberWithFloat:pi]; 

그런 다음에 쉽게 액세스하고/또는 NSNumber 객체에 저장된 값 변환 할 수 있습니다

int piAsInteger = [piNumber intValue]; 
+0

합리적인 답변이지만이 특정 질문에는 해당되지 않습니다. – Abizern

+0

예, 그렇습니다. 코어 데이터는 * objects *만을 보유하기 때문에 NSNumber 클래스가 필요한 이유입니다. 신뢰할 수없는 타사 유틸리티가없는 다른 방법은 없으며 모든 업데이트가 중단 될 수 있습니다. –

+1

그는 NSNumber를 건너 뛰고 NSInteger를 사용할 수 있는지 질문했습니다. 코어 데이터에 객체 만 저장할 수 있기 때문에 대답은 '아니오'입니다. NSNumber가 값을 캡슐화하는 방법에 대한 설명은 불필요합니다. 그리고 다른 누군가가 나와 의견이 맞지 않는다면 자유롭게 답을 상상할 수 있습니다. – Abizern

관련 문제