2012-05-21 46 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的,反之亦然。現在它工作正常

- (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

我意識到我必須轉換爲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

如果可能,請將您的答案標記爲正確。謝謝。 –

相關問題