次の手順で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];
ビューコントローラに新しいivarを追加した場合、これらを正しくシリアル化および逆シリアル化するには、NSCoding
メソッド(encodeWithCoder:
および)をオーバーライドする必要があります。アーカイブおよびシリアル化プログラミングガイドinitWithCoder:
を参照してください。
ところで、これは基本的にnibファイルがどのように機能するかです。
以下の投稿の@Calebの回答を参照してください。
iOS copyWithZone認識されないセレクターは、デバイスを使用している場合のみ
カレブの答えは以下の通りです
UIViewControllerはNSCopyingプロトコルを実装していません。独自のUIViewControllerサブクラスにNSCopyingを実装していない限り、ViewControllerはに応答しません
-copyWithZone:
。
詳細については、UIViewControllerクラスリファレンスを参照してください。
ただし、@ RobNapierがNSCopyingの実装(またはNSCopyObject()が有害と見なされる)で非常に有益で有益な記事の1つを提供しているため、NSCopyingプロトコルリファレンスを実装しないことをお勧めします。
お役に立てれば。