Nsvaluetranformer для шифрования данных
-
12-12-2019 - |
Вопрос
Я хочу зашифровать некоторые столбцы основных данных с помощью 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
.
вызывается допустимым значением, но при выборе объектов я получаю эту ошибку:
* Terminating App из-за неосторожности исключения «NsinvalidArgumentexception», причина: '- [__ NSCFSTSTRING BYTES]: Нераспознанный селектор отправлен на экземпляр 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]; }
Решение
Я понял, что должен преобразовать в 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];
}
.