2012-04-10 6 views
1

私が行って、私のUIViewControllerサブクラスのコピーを作成しようとしています:copyWithZone問題

BookViewController *bookVC = [catalogFlatViewController copy]; 

を、私は次のようなエラーがあります。

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

[iOS copyWithZoneデバイスの使用時のみ認識できないセレクタ]の複製が可能です(http://stackoverflow.com/questions/8539522/ios-copywithzone-unrecognized-selector-only-when-using-device) –

答えて

3

UIViewControllerNSCopyingに準拠していません。あなたがコピーを作成したい場合は、NSCodingを使用する必要があります。

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

あなたのビューコントローラに新しいアイバーズを追加した場合は、シリアル化するNSCoding方法(encodeWithCoder:initWithCoder:)をオーバーライドする必要がありますこれらを正しくデシリアライズします。 Archives and Serializations Programming Guideを参照してください。

ところで、これは基本的にnibファイルの仕組みです。

0

は、以下の記事で答えを@Calebを参照してください:

iOS copyWithZone unrecognized selector only when using device

カレブの答えは、詳細については

UIViewController doesn't implement the NSCopying protocol. Unless you've implemented NSCopying in your own UIViewController subclass, your view controller won't respond to -copyWithZone: .

下の通りです:あなたはUIViewController class referenceを参照することもできます。

しかし@RobNapierがImplementing NSCopying (or NSCopyObject() considered harmful)

で非常に素晴らしく、有益な記事の一つを与えているとして、私は、NSCopyingプロトコルリファレンスを実装していないあなたをお勧めしますが、この情報がお役に立てば幸いです。

関連する問題