尝试将CMTime存储为核心数据

时间:2018-03-10 18:12:50

标签: ios objective-c core-data cmtime

我之前使用过核心数据的可转换属性,但不使用像C这样的CMTime个对象。

我需要使用可转换的方式在核心数据上存储CMTime

在Model对象上,我将其声明为可转换的。

@property (nonatomic, retain) id tempo;

我理解CMTimeC对象,我需要将其转换为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

1 个答案:

答案 0 :(得分:1)

CMTime是一个结构,NSValueTransformer只能与对象(指针)一起使用。

解决方法是将CMTime包裹在NSValue

@property (nonatomic, retain) NSValue *tempo;

并将NSValue转换为CMTime,反之亦然

CMTime time = [self.tempo CMTimeValue];


self.tempo = [NSValue valueWithCMTime:time];