Bar*_*obs 5 core-data unsigned-long-long-int
这里和这里已经提出了这个问题的变化,但似乎这个问题没有得到明确的答案.
我面临的问题是MPMediaLibrary框架将每个MPMediaItem(音乐,视频,播客,...)的引用保持为一个使用的long long(uint64_t),但我似乎无法找到存储此值的方法使用核心数据.使用Integer 64作为数据类型似乎不起作用,我没有看到替代方案.
由于unsigned long longCore Data中不支持,您可能需要自己完成"诀窍".
其中一个想法是将值存储为...二进制数据,并定义返回数据的自定义访问器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
Run Code Online (Sandbox Code Playgroud)
它似乎做了这个工作.代码如下:
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]);
Run Code Online (Sandbox Code Playgroud)
输出:
2012-03-03 15:49:13.792 ulonglong[9672:207] timestamp: 119143881477165
2012-03-03 15:49:13.806 ulonglong[9672:207] timestamp: 119143881477165
Run Code Online (Sandbox Code Playgroud)
像这样的黑客当然会增加间接级别,并且在timestamp大量使用时可能会影响性能.
| 归档时间: |
|
| 查看次数: |
1869 次 |
| 最近记录: |