我正在尝试通过执行以下操作来复制我的 UIViewController 子类:
BookViewController *bookVC = [catalogFlatViewController copy];
我有以下错误:
'-[BookViewController copyWithZone:]: unrecognized selector sent to instance 0x8e5f00'
我正在尝试通过执行以下操作来复制我的 UIViewController 子类:
BookViewController *bookVC = [catalogFlatViewController copy];
我有以下错误:
'-[BookViewController copyWithZone:]: unrecognized selector sent to instance 0x8e5f00'
UIViewController
不符合NSCopying
。如果要制作副本,则必须使用NSCoding
:
NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:controller];
UIViewController *newController = [NSKeyedUnarchiver unarchiveObjectWithData:archive];
如果您向视图控制器添加了新的 ivars,则必须重写NSCoding
方法 (encodeWithCoder:
和initWithCoder:
) 才能正确序列化和反序列化这些。请参阅档案和序列化编程指南。
顺便说一句,这基本上是 nib 文件的工作方式。
请参阅以下帖子中的@Caleb 答案:
iOS copyWithZone 仅在使用设备时无法识别选择器
Caleb的回答如下
UIViewController 没有实现 NSCopying 协议。除非您在自己的 UIViewController 子类中实现了 NSCopying,否则您的视图控制器不会响应
-copyWithZone:
.
有关更多信息:您可能需要参考UIViewController 类参考。
但我建议您不要实施 NSCopying 协议参考,因为@RobNapier 在实施 NSCopying (或 NSCopyObject() 被认为有害)中给出了一篇非常不错且内容丰富的文章
希望这可以帮助。