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 と同じ personId を取得しようとしても、結果が得られませんでした。
問題は、Core Dataが署名付きで保存しているため、値が異なることだと思いますが、どうすれば解決できますか?
そして、並べ替えはどうですか?personId でソートするフェッチ リクエストが必要だとします。現在何が起こっているかというと、大きな数値が負になる (符号付きとして扱われるため) ため、リストの先頭にソートされます。
unsigned long long と Core Data を扱うときのベストプラクティスは何ですか?