NSValueTransformer

主要用于数据类型的变换(如Model?View等),变换可以是单向或双向的。

◆NSValueTransformer是一个抽象类,所有的类型变换都在NSValueTransformer的子类中定义。

◎NSValueTransformer类的已实装方法
管理值变换的名字和值变换对象的mapping方法。
> +valueTransformerNames 返回所有注册的子类转换器
> +setValueTransformer:forName:  并不是注册子类,而是注册NSValueTransformer子类的实例。这样,提供常用功能的值变换,可以用不同的名称不同的参数多次注册。
> +valueTransformerForName:  子类转换器实例的取得(Singleton)

◎子类必须实装的抽象方法
取得转换器信息的方法
> +transformedValueClass
> +allowReverseTransformation

实际转换时使用的方法
> -transformedValue:
> -reverseTransformedValue: 仅在双向时必须

◆框架提供的一些常用子类转换器
> NSNegateBooleanTransformerName
> NSIsNilTransformerName
> NSIsNotNilTransformerName
> NSUnarchiveFromDataTransformerName

 

core data UIColor转换为 自定义数据类型

  
<span style="font-size:14px;">@interface UIColorRGBValueTransformer : NSValueTransformer

@end


#import "UIColorRGBValueTransformer.h"

@implementation UIColorRGBValueTransformer

+ (Class)transformedValueClass
{
    return [NSData class];
}

+ (BOOL)allowsReverseTransformation
{
    return YES;
}

- (id)transformedValue:(id)value
{
    UIColor* color = value;
    const CGFloat* components = CGColorGetComponents(color.CGColor);
    NSString* colorAsString = [NSString stringWithFormat:@"%f,%f,%f,%f", components[0], components[1], components[2], components[3]];
    return [colorAsString dataUsingEncoding:NSUTF8StringEncoding];
}

- (id)reverseTransformedValue:(id)value
{
    NSString* colorAsString = [[[NSString alloc] initWithData:value encoding:NSUTF8StringEncoding] autorelease];
    NSArray* components = [colorAsString componentsSeparatedByString:@","];
    CGFloat r = [[components objectAtIndex:0] floatValue];
    CGFloat g = [[components objectAtIndex:1] floatValue];
    CGFloat b = [[components objectAtIndex:2] floatValue];
    CGFloat a = [[components objectAtIndex:3] floatValue];

    return [UIColor colorWithRed:r green:g blue:b alpha:a];
}</span><span style="font-size:10px;">
</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值