Поскольку в Core Data нет поддержки для 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 - это вариант, который я рассматривал, но я был немного удивлен, узнав, что беззнаковые длинные значения не поддерживаются Core Data из коробки. Во всяком случае, ваше решение работает отлично. –