핵심 데이터에 unsigned long long
에 대한 지원이 없으므로 문자 그대로 "트릭을 수행"해야 할 수 있습니다.
// header
@interface Event : NSManagedObject
@property (nonatomic, retain) NSData * timestamp;
- (void)setTimestampWithUInt64:(uint64_t)timestamp;
- (uint64_t)timestampUInt64;
@end
// implementation
@implementation Event
@dynamic timestamp;
- (void)setTimestampWithUInt64:(uint64_t)timestamp
{
self.timestamp = [NSData dataWithBytes:×tamp length:sizeof(timestamp)];
}
- (uint64_t)timestampUInt64
{
uint64_t timestamp;
[self.timestamp getBytes:×tamp length:sizeof(timestamp)];
return timestamp;
}
@end
일을 할 것 같다 : 아이디어의
하나는 ... 이진 데이터 값을 저장하고, uint64_t
로 데이터를 반환하는 사용자 정의 접근을 정의하는 것입니다. 아래의 코드 :
Event *event = [NSEntityDescription insertNewObjectForEntityForName:@"Event"
inManagedObjectContext:self.managedObjectContext];
uint64_t timestamp = 119143881477165;
NSLog(@"timestamp: %llu", timestamp);
[event setTimestampWithUInt64:timestamp];
[self.managedObjectContext save:nil];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
Event *retrievedEvent = [[self.managedObjectContext executeFetchRequest:request
error:nil] lastObject];
NSLog(@"timestamp: %llu", [retrievedEvent timestampUInt64]);
출력 :
2012-03-03 15:49:13.792 ulonglong[9672:207] timestamp: 119143881477165
2012-03-03 15:49:13.806 ulonglong[9672:207] timestamp: 119143881477165
A는 물론이 같은 해킹은 간접 수준을 추가하고, timestamp
많이 사용하는 경우는 성능에 영향을 미칠 수 있습니다.
감사합니다. NSData는 제가 고려한 옵션 이었지만, 코어 데이터는 코딩되지 않은 long long 값을 지원하지 않습니다. 어쨌든, 당신의 솔루션은 완벽하게 작동합니다. –