اي فون - ماذا تقول وثائق UIImageView وNSCoding متوافقة؟

StackOverflow https://stackoverflow.com/questions/1072700

  •  21-08-2019
  •  | 
  •  

سؤال

ومن الناحية المثالية سوف فئة المتوافقة NSCoding يعمل كما هو متوقع باستخدام encodeWithCoder: وinitWithCoder: (على الأقل كنت اعتقد ذلك حتى وقت قريب) دون المطور الحاجة إلى عناء حول ما يجري داخل الروتينية (إلا إذا فكرتي من فئة المتوافقة NSCoding هي ثمل تماما حتى!)

والطبقة UIImageView وNSCoding متوافقة. لذلك يجب أن لا داعي للقلق كيف سيتم ذلك تسلسل / تسلسل دي باستخدام فئات NSKeyedArchiver وNSKeyedUnarchiver. ولكن في كل مرة أحاول وترميز كائن UIImageView، وأحصل على خطأ UIImage لا تعترف encodeWithCoder: طريقة

والآن UIImageView يستخدم داخليا كائن UIImage. ولكن لا ينبغي أن تؤخذ الترميز الرعاية من ذلك في حد ذاته؟

وأم أن الامتثال NSCoding المحددة في وثائق لمجرد السماح للمستخدم يعلمون أنهم يستطيعون تنفيذ initWithCoder وطرق encodeWithCoder؟

ويمكن للشخص الرجاء توضيح هذا بالنسبة لي! أنا في حيرة تماما!

هل كانت مفيدة؟

المحلول

وثائق مضللة - UIImage لا يتوافق مع NSCoding كما كنت قد ذكرت. يمكنك العمل حوله (في طريقة بدائية) عن طريق القيام بالعمل بنفسك:

@interface UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder;
- (void)encodeWithCoder:(NSCoder *)encoder;
@end

@implementation UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder {
  NSData *pngData = [decoder decodeObjectForKey:@"PNGRepresentation"];
  [self autorelease];
  self = [[UIImage alloc] initWithData:pngData];
  return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
  [encoder encodeObject:UIImagePNGRepresentation(self) forKey:@"PNGRepresentation"];
}
@end

نصائح أخرى

وهذا السؤال يستحق تحديثا منذ دائرة الرقابة الداخلية 5.1 إضافة وظائف لNSCoding إلى UIImage، وسوف ناثان دي فريس الجواب الآن يسبب تحذيرات بأحدث المجمعين.

يقدم هذا السؤال حل للعمل على حل المشكلة إذا التطبيق يدعم دائرة الرقابة الداخلية قبل 5.1. وهي تفعل أساسا نفس الشيء يقترح ناثان، ولكن الشيكات ما إذا كان أسلوب موجود بالفعل أم لا، وليس من الصعب الترميز ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top