代码改变世界

core data UIColor转换为 自定义数据类型 (其他类型数据 转换同理)

2012-10-18 10:04  三戒1993  阅读(152)  评论(0编辑  收藏  举报
转载说明:(谢谢)

http://blog.csdn.net/a21064346/article/details/7792074

点击打开链接

不好意思,因为上传这段代码之后,就忙着写项目,当时也没有注意到代码不好复制什么的。

现在过来补充说明一下:下面这个其实就是自己去 写一个NSValueTransformer的类

它的思想是 将coredata关键字的属性 设置为tansformable的type,这样你才好用其他格式的来进行替换

装载它的容器 是一个NSData的数据格式。下面是例子

对于其他类型的数据,你也可以这样用。比如 数组类型的数据。

#import <Foundation/Foundation.h>

[csharp] view plaincopy
  1. @interface UIColorRGBValueTransformer : NSValueTransformer  
  2.   
  3. @end  
  4.  
  5.  
  6. #import "UIColorRGBValueTransformer.h"  
  7.   
  8. @implementation UIColorRGBValueTransformer  
  9.   
  10. + (Class)transformedValueClass  
  11. {  
  12.     return [NSData class];  
  13. }  
  14.   
  15. + (BOOL)allowsReverseTransformation  
  16. {  
  17.     return YES;  
  18. }  
  19.   
  20. - (id)transformedValue:(id)value  
  21. {  
  22.     UIColor* color = value;  
  23.     const CGFloat* components = CGColorGetComponents(color.CGColor);  
  24.     NSString* colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]];  
  25.     return [colorAsString dataUsingEncoding:NSUTF8StringEncoding];  
  26. }  
  27.   
  28. - (id)reverseTransformedValue:(id)value  
  29. {  
  30.     NSString* colorAsString = [[[NSString alloc] initWithData:value encoding:NSUTF8StringEncoding] autorelease];  
  31.     NSArray* components = [colorAsString componentsSeparatedByString:@","];  
  32.     CGFloat r = [[components objectAtIndex:0] floatValue];  
  33.     CGFloat g = [[components objectAtIndex:1] floatValue];  
  34.     CGFloat b = [[components objectAtIndex:2] floatValue];  
  35.     CGFloat a = [[components objectAtIndex:3] floatValue];  
  36.   
  37.     return [UIColor colorWithRed:r green:g blue:b alpha:a];  
  38. }