解説通りにやればもちろんうまくいく。それでは自分のコードではなぜうまくいかないか・・・。xcatsan師匠の解説では、ViewControllerのinit中でNSMutableArrayにデータを入れている。しかし自分のコードでは、NSOutlineViewで選択行が変更された時にデータを入れ替えている。
どうやら、ArrayControllerに、データソースであるNSMutableArrayのデータが変更されたよ、と教えるメソッドが必要らしい、とわかった。
ADCのサンプル、SourceViewのソースを追うと、なるほど、データが変更されたときはちゃんとupdateというメソッドを読んでいた。つまり、ArrayControllerに結び付けられたNSMutableArrayがlistと言う名前で、それが
@property (readwrite,assign)NSMutableArray* list;とプロパティ宣言されているとしたら、
-(void)updateList:(id)obj{ [self setList:obj]; }というメソッドを記述しておかないとlistに対する変更がArrayControllerに伝わらない、と。
逆を言えば、updateを記述しておくだけであとはArrayControllerが面倒を見てくれるわけで、たしかに便利なしくみではある。わかるまでに時間がかかったけど。
で、こうなりましたよ。
うむー、NSCollectionView、アニメーションがなんかヤだなあ。(^^;)ひとつのアイコンにViewが2つも3つも使われているからけっこう処理が重そうだし。
NSCellを使った独自描画のViewを考えるべきかなあ。
その前にNSTableViewでバインディングとカスタム描画をやってみよう。これは明日以降。
0 件のコメント:
コメントを投稿