проблема с копией с зоной

Я пытаюсь сделать копию своего подкласса UIViewController, выполнив следующие действия:

BookViewController *bookVC = [catalogFlatViewController copy];

и у меня есть следующая ошибка:

'-[BookViewController copyWithZone:]: unrecognized selector sent to instance 0x8e5f00'

person xonegirlz    schedule 10.04.2012    source источник
comment


Ответы (2)


UIViewController не соответствует NSCopying. Если вы хотите сделать копию, вы должны использовать NSCoding:

NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:controller];
UIViewController *newController = [NSKeyedUnarchiver unarchiveObjectWithData:archive];

Если вы добавили новые переменные в свой контроллер представления, вам придется переопределить методы NSCoding (encodeWithCoder: и initWithCoder:), чтобы правильно их сериализовать и десериализовать. См. Руководство по программированию архивов и сериализаций.

Кстати, это в основном то, как работает файл nib.

person Rob Napier    schedule 10.04.2012

Обратитесь к ответу @Caleb в сообщении ниже:

Нераспознанный селектор iOS copyWithZone только при использовании устройства

Ответ Калеба такой, как указано ниже.

UIViewController не реализует протокол NSCopying. Если вы не реализовали NSCopying в своем собственном подклассе UIViewController, ваш контроллер представления не будет отвечать на -copyWithZone:.

Для получения дополнительной информации: вы можете обратиться к Ссылка на класс UIViewController.

Но я бы посоветовал вам не внедрять справочник по протоколу NSCopying, так как @RobNapier предоставил одну из очень хороших и информативных статей по адресу Реализация NSCopying (или NSCopyObject() считается вредным)

Надеюсь это поможет.

person Parth Bhatt    schedule 10.04.2012