我试图通过执行以下操作来复制我的UIViewController子类:
BookViewController *bookVC = [catalogFlatViewController copy];
我有以下错误:
'-[BookViewController copyWithZone:]: unrecognized selector sent to instance 0x8e5f00'
答案 0 :(得分:3)
UIViewController
不符合NSCopying
。如果要制作副本,则必须使用NSCoding
:
NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:controller];
UIViewController *newController = [NSKeyedUnarchiver unarchiveObjectWithData:archive];
如果您已向视图控制器添加了新的ivars,则必须覆盖NSCoding
方法(encodeWithCoder:
和initWithCoder:
)才能正确序列化和反序列化这些方法。请参阅Archives and Serializations Programming Guide。
答案 1 :(得分:0)
请参阅以下帖子中的@Caleb答案:
iOS copyWithZone unrecognized selector only when using device
Caleb 的回答如下
UIViewController未实现NSCopying协议。除非 你已经在你自己的UIViewController子类中实现了NSCopying, 您的视图控制器不会响应
-copyWithZone:
。
有关详情:您可能需要参考UIViewController class reference。
但是我建议你不要实施NSCopying Protocol Reference,因为@RobNapier已经在Implementing NSCopying (or NSCopyObject() considered harmful)
给出了一篇非常精彩且内容丰富的文章。希望这有帮助。