Pergunta

Quero criptografar algumas colunas de dados principais com a ajuda de um NSValueTransformer.A ideia é usar o tipo de dados transformável e definir algum transformador para meus tipos de dados.Dentro dos métodos de transformação, quero criptografar/descriptografar o valor.Eu defini um transformador que na verdade não faz nada - o material criptográfico não está implementado atualmente.

@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;
}

O método

- (NSString*)transformedValue:(id)value

é chamado com um valor válido, mas ao buscar objetos recebo este erro:

* Encerrando o aplicativo devido à exceção não detectada 'NSInvalidArgumentException', motivo:'-[__NSCFString bytes]:seletor não reconhecido enviado para instância 0xf5859f0'

Alguma ideia do que está errado?

EDITAR:

Percebi que preciso converter para NSData e vice-versa.Agora funciona bem

- (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];
}
Foi útil?

Solução

Percebi que tenho que me converter para NSData e vice versa.Agora funciona bem

- (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];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top