我想在 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”而终止应用程序,原因:“-[__NSCFString bytes]:
无法识别的选择器发送到实例 0xf5859f0'
任何想法有什么问题吗?
EDIT:
我意识到我必须转换为 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];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)