2

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

BookViewController *bookVC = [catalogFlatViewController copy];

我有以下错误:

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

2 回答 2

3

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

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

如果您向视图控制器添加了新的 ivars,则必须重写NSCoding方法 (encodeWithCoder:initWithCoder:) 才能正确序列化和反序列化这些。请参阅档案和序列化编程指南

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

于 2012-04-10T04:48:27.617 回答
0

请参阅以下帖子中的@Caleb 答案:

iOS copyWithZone 仅在使用设备时无法识别选择器

Caleb的回答如下

UIViewController 没有实现 NSCopying 协议。除非您在自己的 UIViewController 子类中实现了 NSCopying,否则您的视图控制器不会响应-copyWithZone:.

有关更多信息:您可能需要参考UIViewController 类参考

但我建议您不要实施 NSCopying 协议参考,因为@RobNapier 在实施 NSCopying (或 NSCopyObject() 被认为有害)中给出了一篇非常不错且内容丰富的文章

希望这可以帮助。

于 2012-04-10T05:05:12.803 回答