简体   繁体   中英

Trying to store CMTime as Transformable property on Core Data

I have used transformable properties of Core Data before but not with C objects like CMTime .

I need to store a CMTime on Core Data using transformable.

On the Model object I have declared this as transformable.

@property (nonatomic, retain) id tempo;

I understand that CMTime is a C object and I need to convert this to a NSDictionary and serialize it, so I can store on Core Data.

On the NSManagedObject class, I have this...

+(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];
}

The ????? is my problem. You see, the method transformedValue:(id)value receives value as id but I need a CMTime . I cannot simply cast it.

Also, when I create an instance of this entity, in theory I should be able to assign the value as this:

myEntity.tempo = myCmTimeValue;

and I am not seeing how I can do that to an id ...

also, on reverseTransformedValue: I am returning an id .

I do not understand that. I want to be able to set and receive a CMTime

CMTime is a struct and NSValueTransformer can only be used with objects (pointers).

A workaround is to wrap CMTime in NSValue

@property (nonatomic, retain) NSValue *tempo;

and convert NSValue to CMTime and vice versa

CMTime time = [self.tempo CMTimeValue];


self.tempo = [NSValue valueWithCMTime:time];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM