2017-01-20 4 views
1

에 많은 수를 저장해야합니다 (예 : 14000822124935161134). 다음과 같이"unsigned long long"번호를 영역에 저장하는 모범 사례

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 

을 적당한 유형이 있습니까 현재 내가 다음과 같이 string에의 유형을 변경하여 보관 한 후 저장 이 데이터 유형이 이 아니고 Realm 또는 더 좋은 해결책이 있습니까?

+0

바보 생각하지만, 타임 스탬프의 경우, 당신은 그냥있는 NSDate를 저장할 수 있을까? –

+0

구조가 조금 다르며 NSDate 로의 변환을 권장하지 않습니다. 어떤 식 으로든 고마워요 –

답변

1

영역 지원 long long; 단지 unsigned 변형을 지원하지 않습니다.

값을 long long으로 저장하고 데이터베이스에서 검색 할 때 명시 적으로 다시 캐스팅하는 getter 접근자를 제공 할 수 있습니다.

@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); 

내 아이 패드 에어에서 테스트 그리고 예상대로 작동 할 듯 :

enter image description here

+0

고마워요,하지만 불행히도 그것은 정확하지 않습니다. 'savedTimestamp'는 처음 값과 다른 값을 가진 값입니다. 실수는'13951113131432254825'이고, 데이터베이스에 저장된 숫자는'-4495630942277296791'이며, 마지막으로 표시된 숫자는'107202386029632' –

+0

흠, 호기심이 많습니다. 나는 그것을 직접 테스트했고 내가 말할 수있는 한 기대했던대로 작동하고 있었다. 내가 시도한 스크린 샷을 첨부했습니다. 네! 'signed long long'으로 저장되기 때문에 데이터베이스 자체에서 음수로 표시된다는 것은 의미가 있습니다. 따라서 바이너리 데이터는 정확히 동일하지만 해석이 다르게됩니다. 데이터를 제대로 typecasting하고 있는지 확인하는 한 올바르게 작동합니다. – TiM

+0

감사합니다. 네, 제가 가지고있는 두 번째 시험에 이상이 없었습니다. –