にけのて
Nike+iPod と JogNote を使ってジョギング。で、Mac から Nike+ のデータをあれこれ見たくなったので、ちょこちょこっと作ってみた。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Cocoa Binding で NSTableView のあれこれ
ぱっと見であまり考えなくてもなんとかなるかな?と思ったけど、やっぱり良くわからないな~。とりあえずメモしておこう。

テーブルの各カラム(NSTableColumn)の value は NSArrayController に controller key を arrangedObjects で bind する。で、Model Key Path は Key-Value coding で言う key。あ~後で読み返すと何言ってるんだかわからない…。controller key と Model Key Path の両方に key があるのがややこしい。
もう一回。「テーブルの各カラムの内容は、NSArrayController に arrangedObjects して NSArray をゲットし、それに valueForKey:key で key の NSArray を最終的に取り出したもの。」かな?
こんな感じ…

value = [[nsArrayController arrangedObjects] valueForKey:key];


各カラムを NSArrayController に bind して NSArrayController にデータをセットすればテーブルは表示される。データのセットは NSArrayController に addObject で1つずつ加えるか、addObjects で NSArray を加えるかでできる。既に加えた object への挿入/消去は insert と remove がある。
で、加える objectってどんなん?ってのは NSDictionary(で良いのか?)。NSTableView のカラムの数だけ key の value があれば良い。
カラムが2つでそれぞれ "Filename", "Date"って key で bind されているなら、NSArrayController の中身である NSArray の object(行) になってる NSDictionary は key が "Filename" の value と "Date" の value がセットされてれば良い。

NSMutableDictionary *object = [NSMutableDictionary dictionary];
[object setValue:@"namae" forKey:@"Filename"];
[object setValue:@"04/25/07" forKey:@"Date"];
[nsArrayController addObject:object];

って感じ。行の数だけ object を加えれば OK。
NSArrayController の上に? NSObjectController があってそこに setContent と content があるけど、挿入された行を選択状態にする時のパフォーマンスを気にしなければ使わなくて良いのかな?

次に NSTableView で選択された行にあるデータの詳細を表示する部分(NSTextField)を作った場合。Master-detail インタフェースって Cocoa binding の説明で書かれてたやつ。これは NSTextField の binding を設定する。NSTextField の value は NSArrayController の selection に(Model Key Path の)Key で bind する。
さっきと同じように書くと「NSTextField の内容は、NSArrayController に selection して選択された行の object をゲットし、それに valueForKey:key で key の値を取り出したもの。」かな。selection は NSObjectController にあるのか…。
こんな感じ…

value = [[nsArrayController selection] valueForKey:key];

ってなわけで、NSArrayController がデータ持ってて、それから NSTableView や NSTextField が情報を取り出してる。で、NSTableView の選択されてる行が変わると、NSTextField の値は selection の key なので、選択されている行の値に変更されると。

それじゃ次は NSTableView でダブルクリックされたらその行の何かを表示したいとかって場合は?
NSTableView の Bindings、Action Invocation に doubleClickTargetってのがあるので、これでターゲットを設定できる。さらに doubleClickArgumentってのもある。これで引数を設定できる。が、これはなんだか良くわかってない…。とりあえず設定の方法はココに書いてあるのでこれを真似したら動いた。
まずは doubleClickTarget の方。Bind to はターゲットになるオブジェクト。で、つぎの controller key は使わない。Model Key Path は self(ここが???)。で、下の方に行って Selector Name がターゲットになってるオブジェクトの Selector。ま、動作からして doubleClicked とか? 特に引数がいらなければこれで OK。

- (void)doubleClicked {
}

でダブルクリックを拾える。
選択されているオブジェクトとかの引数が必要な場合、doubleClickArgument でどんな引数が必要かを設定する。選択されているオブジェクトの場合は Bind to は NSArrayController で、controller key は selectedObjects。Model Key Path はいらなくて、下の方の Selector Name がターゲットになってるオブジェクトの Selector。これは doubleClickTarget と同じ。で、こんな感じ。

- (void)doubleClicked:(NSArray*)selectedObjects {
}

これで選択されている行のデータ付きでダブルクリックを拾える。doubleClickArgument を設定すると doubleClickArgument2 が自動的に出てくる。で、これも設定すると doubleClickArgument が…。ってな感じでたくさん引数を渡せるのだけど、NSArrayController なら選択されているオブジェクトで十分じゃないのかな?

というわけで、なんとなくできた部分はこんな感じなのだけど、binding でどうだかな~という部分もある。その辺はまた今度メモっておこう。
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

Nike+iPodってかなりマイナー?
前回の挑戦に Nike+ のページからトラックバックがあった。なんだろう?と思って見たら Blog での応募者全員へのメッセージが!

凄いな~こんな事できるなんて偉いな~。と思いつつ読んでみたりしたのだけど、ふと思った。全員へのメッセージとは言え、Blog と Mixi 合わせて 162件! Blog だけだと 58件! え??? そんだけ???

なんか応募前は漠然と数千っていう数の応募があるような気がしていた。だって Nike だし iPod だし、メジャーな名前が2つ出て来てるんだから挑戦者もそれなりにいるんだと思ってた。けど、実際には 162件…。小さいな~。しかも、Mixi の方が Blog のほぼ倍もある! これもびっくり。そっか、Nike+iPod しててこういうのに応募する人達は Mixi に居着くタイプの人達が多いのか。良く言えばアクティブなタイプなのかな? だから運動もロデオボーイ2じゃなくて外でジョギングなのか!って、何言ってんだか…

で、結局は当選はしなかったのだけど、考えてみたらかなり確率としては高かったんだな~。また次回も挑戦してみようかな。ハーフマラソンは無理だから、また 10km だけど。

テーマ:ウォーキング - ジャンル:ヘルス・ダイエット




プロフィール

paraches

Author:paraches
Nike+iPod で走ってお腹を…

にけのて ダウンロード

Nike+iPod

温泉旅行

宿・ホテル予約ならじゃらんnet

最近の記事

Zenback

ランキング

人気ブログランキングへ

アクセストレード

バリューコマース

最近のコメント

月別アーカイブ

RSSフィード

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。