2012-05-21 3 views
2

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'

어떤 아이디어?

편집 :

나는있는 NSData에 그 반대로 변환 할 필요가 있음을 깨달았다. 지금 내가 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]; 
} 
+0

편집 내용을 답변으로 추가하고 올바른 답으로 받아 들여 질문에 답이 나오지 않게해야합니다. – Caleb

답변

5

잘 작동합니다. 이제는 잘 작동합니다.

- (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]; 
} 
+0

가능하면 답변에 정확한 답을 표시하십시오. 감사. –

관련 문제