我需要在属性中存储uint64_t
数字。Core Data
我还需要在谓词中使用此属性。
问题是,Core Data 只有 Integer64 类型,我无法对该属性执行获取请求。
例如:
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 时,我没有得到任何结果。
我认为问题在于 Core Data 将其存储为已签名,因此值不同,但我该如何解决呢?
那么排序呢?假设我想要一个也按 personId 排序的获取请求?现在发生的事情是大数字变为负数(因为它们被视为有符号),因此它们排序到列表的开头。
那么处理 unsigned long long 和 Core Data 时的最佳实践是什么?