我之前使用过Core Data的可转换属性,但没有使用C
对象(例如CMTime
)。
我需要使用可转换在核心数据上存储CMTime
。
在Model对象上,我已经声明了它是可转换的。
@property (nonatomic, retain) id tempo;
我知道
CMTime
是C
对象,我需要将其转换为NSDictionary并对其进行序列化,以便可以存储在Core Data上。在
NSManagedObject
课上,我有这个...+(Class)transformedValueClass
{
return [NSData class];
}
+(BOOL) allowsReverseTransformation
{
return YES;
}
-(id)transformedValue:(id) value
{
CFDictionaryRef dictTime = CMTimeCopyAsDictionary(?????, kCFAllocatorDefault);
NSDictionary *dictionaryObject = [NSDictionary dictionaryWithDictionary:(__bridge NSDictionary * _Nonnull)(dictTime)];
return [NSKeyedArchiver archivedDataWithRootObject:dictionaryObject];
}
-(id)reverseTransformedValue:(id)value
{
// not complete ???
return (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:value];
}
?????
是我的问题。您会看到,方法transformedValue:(id)value
接收的值为id
,但我需要一个CMTime
。我不能简单地抛弃它。同样,当我创建该实体的实例时,理论上我应该能够将值分配为:
myEntity.tempo = myCmTimeValue;
而且我没有看到如何对
id
执行此操作...另外,我在
reverseTransformedValue:
上返回一个id
。我不明白这个。我希望能够设置和接收
CMTime
最佳答案
CMTime
是一个结构,NSValueTransformer
只能与对象(指针)一起使用。
解决方法是将CMTime
包装在NSValue
中
@property (nonatomic, retain) NSValue *tempo;
并将
NSValue
转换为CMTime
,反之亦然CMTime time = [self.tempo CMTimeValue];
self.tempo = [NSValue valueWithCMTime:time];
关于ios - 尝试将CMTime作为可转换属性存储在核心数据上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49212403/