単語リストプログラム その11

今回は、前回配置したパーツと outlet を結びつけたり、Array Controller の設定とバインディングを設定する。

まずは、前回配置したパーツとそれぞれのテーブルに対応する Array Controller の outlet を設定する。

ib_outlet :startBtn1, :sortChoice1, :sortBtn1, :tokenField1, :typeField1, :wcTable1

ib_outlet :startBtn2, :sortChoice2, :sortBtn2, :tokenField2, :typeField2, :wcTable2

ib_outlet :wcAryCtl1, :wcAryCtl2

AppController に上の outlet を追加して、Interface Builder でパーツと結びつける。

Start Button

Pop Up Button

Sort Button

Token Text Field

Type Text Field

単語 Table

これを右側のパーツでも対応する outlet に結びつける。

あと、単語リストプログラム その6でもやったように、それぞれのテーブルの delegate と dataSource を App Controller に設定する。

次に、nib ファイルのウィンドウに Array Controller を2つ追加して、WC Array 1、 WC Array 2 と名前を変更して、wcAryCtl1 と wcAryCtl2 にそれぞれ結びつける。

そうしたら、追加した Array Controller を選択して、Inspector の Attributes の設定をする。ファイルリストテーブルの Array Controller と同様に Avoid Empty Selection と Select Inserted Objects のチェックを外し、それぞれのコラムに対応した Key を追加する。ここでは、word、freq、order とした。これを2つの Array Controller で同じ設定にする。order は、とりあえず Key にしてみたが、使うかどうかわからない。後で消すかも。

Array Controller の Key を追加したら、テーブルのコラムにバインドする。1つ目のコラムの Value に WC Array の order、2つ目のコラム word、3つ目のコラムに freq をバインドする。これは、それぞれのテーブルで対応する Array Controller に対して行う。

ここまでできたら、awakeFromNib で、単語リストの Array Controller に何か入れてバインドがうまく言っているか確認する。ここでは、次のものを入れてみた。

@wcAryCtl1.addObjects([{"order" => 1,"word" => "the","freq" => 10},{"order" => 2,"word" => "a","freq" => 5}])

@wcAryCtl2.addObjects([{"order" => 1,"word" => "a","freq" => 10},{"order" => 2,"word" => "the","freq" => 5}])

次のような表示になっていれば、ちゃんとバインドされている。

最後に、検索窓のバインディングを設定する。検索窓を選択して Inspector の Bindings で Search の Predicate を開く。Bind to に対応する Array Controller を選んでチェックを入れ、Display Name に Word と入力し、Predicate Format を word contains $value にする(keyPath を word に置き換える)。これを両方の検索窓でする。

設定がうまくいっていれば、検索がインクレメンタルで使えるはず。

これで、インターフェイスの設定はだいたい終わり。次回は、単語リスト作成のスクリプトを書いていく。

単語リストプログラム その12 - 単語リストの作成と表示