سؤال

أرغب في تشفير بعض أعمدة البيانات الأساسية بمساعدة 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];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top