проблема copyWithZone
Я пытаюсь сделать копию моего подкласса UIViewController, выполнив:
BookViewController *bookVC = [catalogFlatViewController copy];
И у меня есть следующая ошибка:
'-[BookViewController copyWithZone:]: unrecognized selector sent to instance 0x8e5f00'
2 ответа:
UIViewController
не соответствуетNSCopying
. Если вы хотите сделать копию, вы должны использоватьNSCoding
:NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:controller]; UIViewController *newController = [NSKeyedUnarchiver unarchiveObjectWithData:archive];
Если вы добавили новые ivars в контроллер вида, вам придется переопределить методы
NSCoding
(encodeWithCoder:
иinitWithCoder:
), чтобы сериализовать и десериализовать их правильно. См. Руководство по программированию архивов и Сериализаций .Кстати, это в основном то, как работает файл nib.
Обратитесь к ответу @Caleb в следующем сообщении:
IOS copyWithZone нераспознанный селектор только при использовании устройства
Ответ Калеба такой же, как под
UIViewController не реализует протокол NSCopying. Если вы реализовали NSCopying в своем собственном подклассе UIViewController, ваш контроллер вида не будет реагировать на
-copyWithZone:
.Для получения дополнительной информации: вы можете обратиться к классу UIViewController Ссылка .
Но я бы предложил вам не реализовывать ссылку на протокол NSCopying, так как @RobNapier дал одну из очень приятных и информативных статей в реализация NSCopying (или NSCopyObject () считается вредным)
Надеюсь, это поможет.