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"، السبب:'-[__NSCFString بايت]:تم إرسال محدد غير معروف إلى المثيل 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];
}
لا تنتمي إلى StackOverflow