2012-05-21 5 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'

Любые идеи, что не так?

EDIT:

я понял, что я должен преобразовать 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 и наоборот. Now It works fine

- (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

Отметьте свой ответ как можно скорее. Благодарю. –