データを暗号化するための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
.
は有効な値で呼び出されますが、オブジェクトをフェッチするときにこのエラーが発生します。
* 退避アプリケーションのための終了アプリは、「NSINValidargumentException」、reason: ' - [__ nscfstring 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];
}
.