質問

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];
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top