Возможно ли заархивировать UIPickerView с использованием encodeObject? - PullRequest
0 голосов
/ 19 октября 2011

Я хочу восстановить свое состояние просмотра, и мое представление имеет UIPickerView.

UIPickerView выглядит как графические компоненты, а именно фоновое изображение колеса. Я знаю, что UIImage не может быть заархивирован. Что-нибудь с изображением, например UIImageView, вы должны сначала установить изображение на nil, прежде чем сможете его кодировать.

Тем не менее, UIPickerView есть NSCoding соответствует. Это означает, что encodeObject и decodeObject должны работать.

Хотя они этого не делают. Я имею в виду, они не вызывают никаких ошибок. Но после декодирования вы получите UIPickerView без каких-либо изображений. Это не выглядит хорошо!

Вот снимок до и после, чтобы доказать, что я не схожу с ума:

До

Before

* После 1029 *

After

Теперь я знаю, что мог бы просто сохранить текущий выбор пользователя и воссоздать представление, вызвав метод selectRow средства выбора. Но на самом деле мне любопытно. Почему UIPickerView NSCoding соответствует, если это не так, и вы не можете ничего сделать, чтобы вернуть фоновое изображение колеса?

1 Ответ

1 голос
/ 27 октября 2011

Вы, похоже, ответили на свой вопрос. UIImageView соответствует NSCoding, но не сохраняет UIImage (очевидно, поскольку изображение сохраняется в другом месте), так почему вы ожидаете, что UIPickerView будет вести себя иначе?

Из того, что я прочитал (хотя никогда не делал), NSCoding в UIViews используется для сохранения состояния (фрейма, видимости и т. Д.), А не фактического представления. Хотя это немного противоречиво со стороны Apple, мне кажется логичным, так как вся библиотека UIView уже находится в iOS, зачем тратить время и пространство на повторную сериализацию всех этих данных?

Единственное, что может быть получено из предложенного вами решения, - это немного меньший шаблонный код (для сброса вида), который может замедлить чтение / запись объектов (поскольку он должен учитывать изображения). )

...