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];

ビューコントローラに新しいivarを追加した場合、これらを正しくシリアル化および逆シリアル化するには、NSCodingメソッド(encodeWithCoder:および)をオーバーライドする必要があります。アーカイブおよびシリアル化プログラミングガイドinitWithCoder:を参照してください。

ところで、これは基本的にnibファイルがどのように機能するかです。

于 2012-04-10T04:48:27.617 に答える
0

以下の投稿の@Calebの回答を参照してください。

iOS copyWithZone認識されないセレクターは、デバイスを使用している場合のみ

カレブの答えは以下の通りです

UIViewControllerはNSCopyingプロトコルを実装していません。独自のUIViewControllerサブクラスにNSCopyingを実装していない限り、ViewControllerはに応答しません-copyWithZone:

詳細については、UIViewControllerクラスリファレンスを参照してください。

ただし、@ RobNapierがNSCopyingの実装(またはNSCopyObject()が有害と見なされる)で非常に有益で有益な記事の1つを提供しているため、NSCopyingプロトコルリファレンスを実装しないことをお勧めします。

お役に立てれば。

于 2012-04-10T05:05:12.803 に答える