copyWithZone问题

时间:2012-04-10 04:41:14

标签: iphone objective-c ipad nscopying

我试图通过执行以下操作来复制我的UIViewController子类:

BookViewController *bookVC = [catalogFlatViewController copy];

我有以下错误:

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

2 个答案:

答案 0 :(得分:3)

UIViewController不符合NSCopying。如果要制作副本,则必须使用NSCoding

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

如果您已向视图控制器添加了新的ivars,则必须覆盖NSCoding方法(encodeWithCoder:initWithCoder:)才能正确序列化和反序列化这些方法。请参阅Archives and Serializations Programming Guide

顺便说一下,这基本上就是一个nib文件的工作方式。

答案 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)

给出了一篇非常精彩且内容丰富的文章。

希望这有帮助。