2011-01-23 11 views
0

Interface Builderの配列コントローラ(myArraycontroller)を辞書で構成される配列(fileDictionariesArray)に接続しています。これは正常に動作しますが、私はアクセスし、私はこのような私のarrayControllerにプログラム的にコンテンツを追加するまで、私はコンテンツにnilを取得arraycontroller [myArrayController arrangedObjects]の内容の上に列挙しようとすると:NSArraycontrollerがコンテンツにアクセスする

[myArrayController addObjects:fileDictionariesArray]; 

私は私ができることを行っている後すべての内容をループします。問題は、配列(fileDictionariesArray)が2回追加されたことです。 IBバインディングによる1回とaddObjectsによる1回。プログラムでコンテンツを設定するまでは、arrayContollerにアクセスできません。私はarrayControllerの内容を削除することができますし、このように、プログラムで再度設定:arrayController内のアイテムの正しい数を与えます

[myArrayController setContent:nil]; 
[myArrayController addObjects:fileDictionariesArray]; 

を、それがこれを行うには正しい方法のように見えるしていません。私は、コンテンツを2回追加せずに、arrayObjects配列を使ってarrayControllerにアクセスする方法を誰にでも教えていただければ幸いです。

ありがとうございました。 Cheers、Trond Kristiansen

+0

あなたがコンテンツに何もないと言ったとき、いつどこでそれを調べますか? –

+0

あなたの前のコメントに何か問題がありましたか?私は[myArrayController addObjects:fileDictionariesArray]を呼び出します。その直後にarrayControllerの要素をループします:for(myArrayのNSDictionary *ファイル){NSLog ...}。配列の数は20でなければなりませんが、代わりに最初の要素がnullを含む21です。私はこれがawakeFromNibで初期化された空のarrayControllerに配列を追加した結果かもしれないと思いますか? –

+0

私は私の答えを削除したので私の前のコメントを見ることができないようです。準備はコンテンツを適用することができません。なぜなら、nibファイルからコントローラをロードする際に新しいインスタンスを作成するため、IBのチェックを外します。 –

答えて

0

あなたの投稿とあなたとBavariousのコメントに基づいて、彼は彼の答えを削除してはいけないと確信しています。彼はあなたにこのコードをどこで呼んでいるのかを尋ねました(-awakeFromNib?から)。これは答えに欠かせない質問です。

これを-awakeFromNibから呼び出すと、次の質問は「ペン先のどのオブジェクトかオーナーか他のコントローラかドキュメントですか?

あなたのコードを呼び出す前に、配列コントローラはおそらく配列の「変更」を観察する時間がありません。そのため、内容を強制的に追加すると2度追加されてしまいます(完了した後、アレイコントローラはコンテンツアレイを観察してコンテンツを取得します...再度、アレイの内容を2倍にしました) 。

すぐに起動する場合は、アレイ上で直接操作することをお勧めします。始動が完了した後にアレイコントローラーに責任を残しておけば、それについては何も「間違っている」または「汚い」ことはありません。

私はあなたがしていることをちょうど推測しているので、これ以上具体的になるのは難しいです。あなたの質問を修正して、あなたのアレイコントローラがどのようにアーキテクチャに適合しているか、スタートアップ時にアレイに対して何をやっているかなどの詳細な説明を追加してください。この情報がないと、あまりにも多くの推測が迫られます。

+0

私は答えが間違っていて、該当しないため削除しました。準備するコンテンツは、新しい空のインスタンスをアレイコントローラに追加します。 –

+0

BavariousとJoshuaにお手伝いいただき、ありがとうございます。私はあなたが私に言ったことを考え、自分のコードを再編成しました。私はまだaddObjectsを使ってarrayControllerをロードしていますが、その数は正しいので、コード内で何が起こっているのか分かります。ご協力いただきありがとうございます。 Cheers、Trond –

+0

@Bavarious - 私は思っていますが、正しい軌道に乗っていました。あなたは編集して追い求めることができました。私はそれのために私自身の答えを入れるのが嫌いでした。 :-) –

関連する問題