2011-09-28 3 views
0

기본적으로 내 문제는 제목에서 정확히 무엇입니까? UIViewController의 서브 클래스를 인코딩하려고 시도하면 [super encodeWithCoder]을 호출하면 NSInvalidArgumentException이됩니다. 특히 나는 -[UIImage encodeWithCoder:]: unrecognized selector sent to instance XxXXXXXX이됩니다.UIViewController encodeWithCoder보기에 사용자 정의 이미지가있는 UIButton이 포함되어 있으면 실패합니다.

뷰의 유일한 이미지 이미지는 UIButton이며 NSCoding을 준수해야하며 스택 추적에는 [UIBUtton encodeWithCoder]이 포함됩니다. 단추는 프로그래밍 방식으로 [UIButton buttonWithType:UIButtonTypeCustom]으로 만들어지고 이미지는 setImage: forState:으로 설정됩니다. 나는 여기서 무슨 일이 벌어지고 있는지 전혀 모른다. 명백한 것을 놓치고 있습니까, 아니면 UIButton은 실제로 NSCoding을 따르지 않습니까?

답변

1

왜 앱에서 뷰 객체를 보관하고 싶은지 상상할 수 없지만 UIImage에 카테고리를 작성하여 직접 NSCoding 지원을 추가해야 할 수도 있습니다. 자세한 내용은

은 다음을 참조하십시오 뷰 로딩 시스템이 펜촉 파일에서 개체를로드하는 데 사용하기 때문에 iPhone - Why does the documentation say UIImageView is NSCoding compliant?

보기 객체가 NSCoding을 지원합니다. 그러나 UINib 클래스는 NSKeyedArchiver가 수행하지 않는 몇 가지 추가 작업을 수행합니다.

실행 사이에 상태를 저장하려는 경우 데이터를 저장하고보기 상태가 아닌 것이 좋습니다. 특히 앱을 업데이트하고 뷰 레이아웃을 변경하려는 경우 특히 그렇습니다. (이것은 모델/뷰/컨트롤러 분리의 동기입니다.)

+0

기본적으로 NSCoding을 준수한다고해서 실제로 Apple이 의미하는 바는 아닙니다. 링크를 가져 주셔서 감사합니다,하지만 난 그것을 찾지 못했습니다. –

+1

그것은 그것이 말하는 것을 의미합니다, 그것은 단지 당신이 생각하는 것을 말하지 않습니다. 예를 들어, NSCoding 클래스는 키 저장 또는 고전 보관 또는 둘 다 지원할 수도 있고 둘 다 지원하지 않을 수도 있습니다. 보장은 없습니다. – benzado

관련 문제