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

片方向の Binding
NSArrayController を使ってテーブルとその詳細を表示するということをやるのはとても簡単。Binding でパッパと繋げば、テーブルで選択されている部分が変わると詳細で表示されている内容も変わる。更に詳細の部分でデータを変更すると、テーブルの中のデータも変更される。Binding 万歳!

でも、今回は詳細の部分はテーブルに合わせて変わってほしいのだけど、詳細部分でデータを変更してもそのデータはテーブルに(オリジナルデータに)反映されたくなかった。そんな場合はどうしたものか? Interface Builder で Binding してしまうと両方向?に変化が伝わる。でも、今回は詳細部分がテーブルの変化を知りたいだけで逆方向は必要ない。そんなの Interface Builder で設定できるの?

結局、悩んでも仕方がないので Interface Builder での Binding を止めて自分で Binding してみた。具体的には NSArrayController に Selection が変わったら教えてくれるよう自分を登録するだけ。

[myArrayController addObserver:self forKeyPath:@"selection" options:NSKeyValueObservingOptionNew context:nil];


これで NSArrayController は選択している部分(Selection)が変わったら、自分の中のメソッド

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

を呼んでくれる。

呼ばれたら NSArrayController から選択されている部分のデータを取り出して、それを詳細部分にセット。これで片方向の Binding?のできあがり。
片方向の Binding が必要になるなんて UI の設計がいけないのだろうけど、ま、手でやればなんとかなったので OK としよう。

ところで、NSArrayController が -(void)observeValueForKeyPath:... を呼んでくれるときに ofObject:(id)object が引数として渡されるのだけど、この objectって NSArrayController の選択されている部分の(selection な)データじゃないの? 単純に NSDictionary をセットしてやってみたんだけど、this class is not key value coding-compliantって怒られた…。
ん?そっか、selection の元?の object が来るのね。[object selectedObjects] で選択されてる objects が取れた。


スポンサーサイト

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




プロフィール

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

にけのて ダウンロード

Nike+iPod

温泉旅行

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

最近の記事

Zenback

ランキング

人気ブログランキングへ

アクセストレード

バリューコマース

最近のコメント

月別アーカイブ

RSSフィード

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