2017-01-20 5 views
1

のような大きな数値を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またはそれ以上の優れたソリューションですか?

+0

愚かなアイデアが、それは、タイムスタンプだ場合、あなただけのNSDateを保存することができませんでしたか? –

+0

これは構造が少し異なり、NSDateへの変換はお勧めしません。いずれにせよお返事あり –

答えて

1

レルムサポートlong long;それはただunsignedの変形をサポートしていません。

単に値をlong longとして保存し、データベースから取得するときに明示的にキャストするゲッターアクセサを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でテストされ、それが期待どおりに動作しているように見えた:

enter image description here

+0

ありがとうございますが、残念ながらそれは正しくありません。 'savedTimestamp'は、最初のものとは異なる値を持つものです。実数は '13951113131432254825'、データベースの保存数は' -4495630942277296791'、最後に表示される数字は '107202386029632' –

+0

Hmmです。それは興味深いです。私は自分でそれをテストし、私が言うことができる限り、それは私が期待していたように働いていた。私が試したことのスクリーンショットを添付しました。うん! 'signed long long'として保存されているので、データベース自体に負の数として表されていることは意味があります。したがって、バイナリデータはまったく同じですが、解釈が異なります。データを正しくタイプキャストしていることを確認している限り、正常に動作するはずです。 – TiM

+0

ありがとうございました。はい、それは私が持っていた2番目のテストのための問題なしでした。 –

関連する問題