NSValueTranformer对数据进行加密(NSValueTranformer to encr

2019-09-17 09:13发布

我想一些核心数据列与NSValueTransformer的帮助下进行加密。 我们的想法是,我使用的数据类型和变形定义一些变压器我的数据类型。 内部改造的方法我要加密/解密的价值。 我定义了一个变压器,实际上什么也不做 - 将加密的东西目前未实现。

@implementation StringCryptoTransformer

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


+ (BOOL)allowsReverseTransformation { return YES; }


- (NSString*)transformedValue:(id)value {

    NSLog(@"Transformer: %@",value);

    if([value isKindOfClass:[NSString class]]){
        return value;
    }
    return nil;
}     

- (NSString*)reverseTransformedValue:(id)value
{
    return value;
}

方法

- (NSString*)transformedValue:(id)value

被称为一个有效的值,但是获取对象,当我得到这个错误:

*终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因:“ - [__ NSCFString字节]:无法识别的选择发送到实例0xf5859f0”

任何想法有什么不好?

编辑:

我意识到,我必须转换为NSData的,反之亦然。 现在,它工作正常

- (id)transformedValue:(id)value {

    NSData *data =  [((NSString*)value) dataUsingEncoding:NSUTF8StringEncoding];
    return [CryptoUtils encryptWithKey:self.key data:data];
}


- (id)reverseTransformedValue:(id)value
{
    NSData *data = [CryptoUtils decryptWithKey:self.key data:value];
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

Answer 1:

我意识到,我必须转换为NSData ,反之亦然。 现在,它工作正常

- (id)transformedValue:(id)value {

    NSData *data =  [((NSString*)value) dataUsingEncoding:NSUTF8StringEncoding];
    return [CryptoUtils encryptWithKey:self.key data:data];
}    

- (id)reverseTransformedValue:(id)value
{
    NSData *data = [CryptoUtils decryptWithKey:self.key data:value];
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}


文章来源: NSValueTranformer to encrypt data