我之前使用过核心数据的可转换属性,但不使用像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
答案 0 :(得分:1)
CMTime
是一个结构,NSValueTransformer
只能与对象(指针)一起使用。
解决方法是将CMTime
包裹在NSValue
@property (nonatomic, retain) NSValue *tempo;
并将NSValue
转换为CMTime
,反之亦然
CMTime time = [self.tempo CMTimeValue];
self.tempo = [NSValue valueWithCMTime:time];