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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章