UIViewController encodeWithCoder завершается ошибкой, когда представление содержит UIButton с пользовательским изображением - PullRequest
0 голосов
/ 29 сентября 2011

По сути, моя проблема в том, что написано в заголовке.Когда я пытаюсь закодировать подкласс UIViewController, вызов [super encodeWithCoder] дает NSInvalidArgumentException.В частности, я получаю -[UIImage encodeWithCoder:]: unrecognized selector sent to instance XxXXXXXX.

Единственное изображение в представлении находится на UIButton, который также должен соответствовать NSCoding, а трассировка стека включает в себя вызов [UIBUtton encodeWithCoder].Кнопка создается программно с помощью [UIButton buttonWithType:UIButtonTypeCustom], а изображение устанавливается с помощью setImage: forState:.Я действительно понятия не имею, что здесь происходит.Я что-то упускаю из виду, или UIButton просто не соответствует NSCoding?

1 Ответ

1 голос
/ 29 сентября 2011

Я не могу представить, почему вы хотите архивировать объекты представления в вашем приложении, но вам, вероятно, нужно добавить поддержку NSCoding самостоятельно, написав категорию на UIImage.

Подробнее см. iPhone - Почему в документации говорится, что UIImageView совместим с NSCoding?

Объекты представления поддерживают NSCoding, поскольку система загрузки представлений использует его для загрузки объектов из файлов Nib.Но класс UINib выполняет некоторую дополнительную работу, которую не выполняет NSKeyedArchiver.

Если вы просто хотите сохранять состояние между запусками, лучше хранить данные, а не просматривать состояние.Особенно, если вы когда-нибудь планируете обновить свое приложение и внести какие-либо изменения в макет представления.(Это мотивация разделения Модель / Вид / Контроллер.)

...