2009-05-28 5 views
3

コアデータストアにバインドされているアレイコントローラのコンテンツロードがいつ完了するのかを知る最も良い方法は何ですか?NSArrayControllerが永続ストアからコンテンツのロードを完了したことを通知する正しい方法は何ですか?

コンテンツを持つアレイコントローラに依存するいくつかの方法(awakeFromNib)がありますが、awakeFromNibがそのオブジェクトで呼び出されているときにアレイコントローラにコンテンツがまだほとんどありません。

コントローラーがすべてのコンテンツを持っていることがわかるまで、私の行動を遅らせたいと思います。

答えて

3

についての議論のためのTheocacaoは、ウィンドウでは、潜在的に順序のでこれで問題に実行することができます-awakeFromNibに比べて完全にロードされた後、それを呼び出して、通常は安全な賭けである参照してください。あなたのペン先のすべてのオブジェクトで呼び出されていますが定義されていません。

一般的には、やっているすべての初期化、正しく動作させるためにはUIが必要な部分、ユーザーがアクションを実行するまでどの部分を遅らせるか、といった具合です。たとえば、ユーザーが要求するまで開かれていないウィンドウがある場合に備えて、直前までCore Dataフェッチを行うなどのタスクを遅らせることは良いことです。一方で、永続化メソッドを動作させるためにデータソースを事前に設定する必要があるアウトラインビューのようなオブジェクトで作業することもあります。

実行していることがわかったら、実行する必要がある順序で、init、awakeFromNib、yyyWillLoad、またはxxxDidLoadの組み合わせを選択することができます。このようなバグは、彼らはトラブルを引き起こす機会があります。

+1

@ctshryock:この回答を本当に考慮する必要があります。私の投稿はあなたの質問に対する答えです。しかし、この回答は実際のアプリケーションで何をすべきかを説明しています。 – cocoafan

+0

あなたのおかげです。 – catsby

1

-windowDidLoadにそのコードを移動するこの問題

+0

私は遅延メッセージを使用することに同意しません。なぜなら、普通はそのロジックを置くのがより良い場所だからです(そして、その記事へのコメントで論じられた理由のため)。 –

+1

実際、NSArrayController(http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/Articles/ControllerKey-ValueObservingCompliance.html#//apple_ref/doc/uid/TP40002493-DontLinkElementID_3)のKVO通知を見ました。 )。タイミングを見るためにオブザーバーを追加することで、ストアからのロードが完了した時点で「コンテンツ」がトリガーされているようです。 – catsby

関連する問題