在 Realm 中存储 "unsigned long long" 数字的最佳实践解决方案

Best practice solution for storing "unsigned long long" number in Realm

我必须在 Realm 存储中存储大量数字,例如 14000822124935161134。目前我通过将它们的类型更改为 string 来存储它们,如下所示,然后保存:

    NSMutableDictionary *itemInsert = [item mutableCopy];

    if([item valueForKey:@"timestamp"]) {
        unsigned long long timestamp = [[item valueForKey:@"timestamp"] unsignedLongLongValue];
        [itemInsert setObject:[NSString stringWithFormat:@"%llu", timestamp] forKey:@"timestamp"];
    }

    RLMRealm *realm = [RLMRealm defaultRealm];
    [realm beginWriteTransaction];
    [RMember createOrUpdateInRealm:realm withValue:itemInsert];
    [realm commitWriteTransaction];

而我的RLMObjecttimestamp属性定义如下:

@interface RMember : RLMObject
...
@property (nullable) NSString *timestamp;
...
@end

对于Realm中的此类数据,是否有任何合适的类型而不是string或更好的解决方案?

领域支持long long;它只是不支持 unsigned 变体。

您可以简单地将值保存为 long long 并提供一个 getter 访问器,在从数据库中检索时将其显式转换回 unsigned long long

@interface RMember : RLMObject
@property long long timestamp;
@end

unsigned long long timestamp = [[item valueForKey:@"timestamp"] unsignedLongLongValue];

RLMRealm *realm = [RLMRealm defaultRealm];
RMember *myObject = ...;
[realm transactionWithBlock:^{
    myObject.timestamp = (long long)timestamp;
}];

unsigned long long savedTimestamp = (unsigned long long)myObject.timestamp;
NSLog(@"Saved timestamp is %llu", savedTimestamp);

在我的 iPad Air 上测试,它似乎按预期工作: