0

uint64_t 번호는 Core Data 속성에 저장해야합니다. 또한이 속성을 술어에 사용해야합니다.
핵심 데이터는 Integer64 형식 만 갖고 있으므로 해당 속성에 대한 인출 요청을 수행 할 수 없습니다. 예를 들어
: 당신이 여기에서 볼 수 있듯이코어 데이터 부호없는 long long 모범 사례

NSNumber *pid = @(9224992848802061623ULL); // some unsigned long long 

    // create a person with this id  
    Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.context]; 
    person.personId = pid; // personId is core data NSNumber property typed integer 64 

    [self.context save:nil]; 

    // now try to fetch this person we just added 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 
    request.predicate = [NSPredicate predicateWithFormat:@"personId == %@", pid]; 

    NSArray *match = [self.context executeFetchRequest:request error:nil]; 
    // NO RESULTS! 

, 나는 내가 방금 만든 것과 같은 personId를 가져 오기 위해 노력하고 아무런 결과를 얻지 않았다.
코어 데이터가 서명 된대로 저장하므로 값이 다르다고 가정합니다. 어떻게 해결할 수 있습니까?

그리고 정렬은 어떻습니까? personId별로 정렬하는 가져 오기 요청을 원한다고 가정합니다. 지금 일어나고있는 일은 큰 숫자가 음수가된다는 것입니다 (서명 된 것으로 취급되기 때문에). 그래서 목록의 시작 부분으로 정렬됩니다.

그래서 부호없는 long long 및 Core Data를 처리 할 때 가장 좋은 방법은 무엇입니까?

답변

1

나는 이것을 NSDecimalAttributeType을 사용하여 저장하는 것이 좋습니다. 그건 모든 64 비트 번호를 지원하고 정확하게 정렬 할 수 있어야합니다.

또는이 둘을 이진 데이터로 저장할 수도 있습니다. 아마도이 식별자는 다소 불투명 한 식별자 일 수 있기 때문입니다.

+0

10 진수를 사용할 때 무슨 일이 일어나는지 설명 할 수 있습니까? 그것은 작동하는 것으로 보이지만 왜 이해가 안되는가 – Eyal

+0

@Eyal NSDecimalNumber로 값을 저장합니다. NSDecimalNumber는 근본적으로 38 자리의 정밀도를 가진 10 진수입니다. 따라서 64 비트 부호없는 int에 대한 충분한 공간이 필요합니다. –

관련 문제