2011-10-19 2 views
0

내보기 상태를 복원하고 내보기가 UIPickerView입니다.encodeObject를 사용하여 UIPickerView를 아카이브 할 수 있습니까?

UIPickerView에는 그래픽 구성 요소, 즉 배경 휠 이미지가있는 것처럼 보입니다. UIImage은 보관할 수 없습니다. UIImageView과 같은 이미지가있는 이미지를 인코딩하려면 먼저 이미지를 nil으로 설정해야합니다.

그러나 UIPickerViewNSCoding입니다. 즉, encodeObjectdecodeObject이 작동해야합니다.

그들은 그렇지 않습니다. 내 말은, 그들은 어떤 오류도 일으키지 않는다는 뜻입니다. 그러나 해독 한 후에는 이미지가없는 UIPickerView이 표시됩니다. 그것은 좋아 보이지 않는다!

가 여기에 이전과 촬영 후 그냥 미친 않을거야 증명하기입니다 :

Before

전에

After

이제 한 후, 나도 알아. 내가 현재 사용자 선택을 저장하고 피커의 selectRow 메소드를 호출하여보기를 다시 만들 수 있습니다. 그러나 정말로, 나는 호기심이 많다. UIPickerViewNSCoding은 실제로는 아니며 배경 휠 이미지를 얻으려면 더 이상 할 수없는 이유는 무엇입니까?

답변

1

당신의 질문에 대한 답변을 보셨습니다. UIImageViewNSCoding을 준수하지만 UIImage을 저장하지 않습니다 (분명히 이미지가 다른 곳에 저장되기 때문에 분명히) UIPickerView이 다르게 동작 할 것이라고 생각하십니까?

NSCodingUIViews은 실제보기가 아닌 상태 (프레임, 가시성 등)를 저장하는 데 사용됩니다. Apple 측에서는 약간의 모순이 있지만 전체 UIView 라이브러리가 이미 iOS에 있기 때문에 논리적으로 보입니다. 왜 & 공간에서 모든 데이터를 재구 축합니까?

제안 된 솔루션에서 얻을 수있는 유일한 것은 (보기를 다시 설정하기위한) 상용어 코드가 약간 적어서 개체의 읽기/쓰기 속도가 느려질 수 있다는 것입니다. 이미지)

+0

내 요점은 UIPickerView를 재구성 할 수 없다는 것입니다. 그렇다면 NSCoding을 준수해야하는 이유는 무엇입니까? –

+1

Kevin이 설명했습니다. NSCoding은 * 모든 것을 원칙적으로 보관하지 않으며 단순히 재구성하는 데 필요한 데이터 만 보관합니다. – James

+1

NSCoding이하는 일을 너무 많이 읽고 있다고 생각합니다. Apple의 문서에서 : "이 기능은 아카이브의 기초를 제공합니다." 당신이 그것을 만들고자하는 "원 스톱 숍"이라고 절대로 말하지 마십시오. – Kevin

관련 문제