2011-11-16 12 views
0

新しいドキュメントベースアプリケーションを作成しました。ドキュメントベースアプリケーションに保存できません

私は、メニュー何のつもりが起こるからコンソールにエラーを "保存" をクリックすると、私はNSDocumentの

- (NSData*) dataOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError 
{ 
     return [NSKeyedArchiver archivedDataWithRootObject:bcmwc.bindingsController.arrangedObjects]; 
} 

in xib http://i.minus.com/iH2Rj9v5oOhTn.png

のサブクラスでdataOfTypeを実施しました。 dataOfTypeにブレークポイントを設定しました。「保存」をクリックすると、アプリケーションが停止しませんでした。

提案がありますか?私はそれが私は、カスタムのNSWindowController、およびカスタムXIBを使用することで接続することができると思います

EDIT

。 カスタムxibをロードしたときにテストを行いました。すべてがうまくいきました。dataOfTypeメソッドが呼び出されました。

私のカスタムxib(ウィンドウ)をNSDocumentのサブクラスと何らかの方法で接続する必要がありますか?

+2

「メニューから「保存」をクリックすると、何も起こりません。コンソールにエラーがあります。」というメッセージが表示されます。これをより良く説明してください。 –

+0

また、より正確なサブジェクト名を選んでください。 「最初のドキュメントベースのアプリケーション」では、質問の性質について全く何も教えてくれません。 –

答えて

0

あなたの保存メニュー項目が正しく接続されているようですので、コードに集中しましょう(最初に投稿したため+1)。

-archivedDataWithRootObject:が有効なデータを返すか、そうでない場合はエラーを設定するようにコード内に何もしていません。あなたの電話番号-archivedDataWithRootObject:が同じことをしているので、私が一番推測しているのは、あなたが何かをするのに十分な詳細を提供していないからです。有効なデータがあるかどうかを確認し、そうでない場合はoutErrorを設定します。

なぜあなたはnilを取得しますか?おそらく、アレイコントローラの-arrangedObjectsアレイをアーカイブすることによって作成されたオブジェクトグラフ内の1つ以上のオブジェクトが、<NSCoding>に準拠していない可能性があります。これは、アレイコントローラが、標準プロパティリストコンテナではなく作成したカスタムクラスのオブジェクトを保持している場合に発生します。

カスタムクラスを<NSCoding>に準拠させる方法を学ぶには、アーカイブとシリアライズのプログラミングガイド(特にEncoding and Decoding Objectsのセクション)を読んで、それ自体をシリアライズする方法を知っているようにします(NSKeyedArchiverなどに適したバイトストリームそのようなバイトストリームから自身のインスタンスを作成します)。

また、デバッガを使用することを実際に習得する必要があります。あなたはそれがなければたくさんの落とし穴と懐中電灯のない暗い洞窟を徘徊しています。呼び出されると予想されるメソッドにブレークポイントを設定してみてください。コールされていない場合は、アウトレット/アクションなどをチェックすることができます。そうであれば、各行を踏んで、期待通りにすべてが実行されていることを確認できます。もう少し冗長なコードを書くと、デバッガで一時停止したときの結果をより簡単に調べることができます。

+0

私は私の質問に書いた - 問題は、なぜdataOfTypeメソッドが呼び出されていない、なぜアーカイブが機能しないのですか? – badeleux

+0

元々は、[保存]をクリックしても何も起こらないと書きましたが、それ以上の情報はありません。私は残りの部分を含める答えを書いた後、あなたはそれを編集しました。私はあなたが最初に尋ねた質問に答えました。 –

関連する問題