2012-05-21 38 views
2

我想一些核心数据列与NSValueTransformer的帮助下进行加密。这个想法是,我使用数据类型可转换并为我的数据类型定义了一些转换器。在我想要加密/解密值的转换方法内部。我定义了一个实际上什么都不做的变换器 - 目前还没有实现加密内容。NSValueTranformer对数据进行加密

@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 

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

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 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]; 
} 
+0

您应该添加您的编辑作为答案,并接受它作为正确的答案,以便您的问题不再显示未答复。 – Caleb

回答

5

我意识到我必须转换为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]; 
} 
+0

如果可能,请将您的答案标记为正确。谢谢。 –

相关问题