문제

이상적으로 nscoding 준수 클래스는 enourodewithcoder를 사용하여 예상대로 작동합니다. 그리고 initwithcoder : (적어도 최근까지 그렇게 생각했습니다) 개발자가 루틴 내부에서 무슨 일이 일어나는지에 대해 귀찮게하지 않으면 서 (NSCoding Compliant 클래스에 대한 나의 아이디어가 완전히 망쳐지는 경우가 아닙니다. !)

uiimageview 클래스는 nscoding 준수입니다. 따라서 NSKeyEdarchiver 및 NSKeyEdUnarchiver 클래스를 사용하여 직렬화/디시 알을 어떻게 방해 할 필요는 없습니다. 그러나 uiimageview 객체를 인코딩하려고 할 때마다 UIIMAGE가 encodewithCoder : Method를 인식하지 못하는 오류가 발생합니다.

이제 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

다른 팁

이 질문은 iOS 5.1이 UIIMage에 NSCODING에 대한 기능을 추가했기 때문에 업데이트가 필요하며 Nathan de Vries 답변은 이제 최신 컴파일러와 경고를 일으킬 것입니다.

이 질문은 해결책을 제공합니다 앱이 5.1 이전에 iOS를 지원하는 경우 문제를 해결하려면. 그것은 기본적으로 Nathan이 제안하는 것과 동일하지만, 방법이 하드 코딩하는 대신 이미 존재하는지 여부를 확인합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top