Я хочу зашифровать некоторые столбцы основных данных с помощью 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];
}
Вы должны добавить свое редактирование как ответ и принять его как правильное, чтобы ваш вопрос больше не отображался без ответа. – Caleb