コアデータにunsigned long long
のサポートがないので、文字通り「自分のやり方をする」必要があるかもしれません。
アイデアの一つとして...バイナリデータ値を格納し、uint64_t
としてデータを返すカスタムアクセサを定義することです:
// 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
仕事をするようです。以下のコード:
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
もちろん、このようなハックは、間接的なレベルを追加し、timestamp
が頻繁に使用されるとき、それは、パフォーマンスに影響を与える可能性があります。
この詳細答え、@ayoyを提出する時間を割いてくれてありがとう非常に。 NSDataは私が検討していたオプションでしたが、私は、unsigned long long値がCore Dataでサポートされていないことを知るために少し驚きました。とにかく、あなたのソリューションは完璧に動作します。 –