単語リストプログラム その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 - 単語リストの作成と表示