0

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 を扱うときのベストプラクティスは何ですか?

4

1 に答える 1

1

を使用してこれらを保存することをお勧めしNSDecimalAttributeTypeます。これは、任意の 64 ビット数値をサポートし、正しくソートできるはずです。

または、これらは多かれ少なかれ不透明な識別子であると思われるため、バイナリ データとして保存することもできます。

于 2014-09-23T14:21:56.697 に答える