NSTableView * NSArrayController && !CoreData
今まで、NSTableViewとNSArrrayControllerを使うときは、CoreDataと一緒にしか使ったことがなかった。
ただ、そんないつもCoreDataが必要ということはないので、勉強もかねてPlainなオブジェクトと一緒に使ってみる。
参考:Takeba.me: ビュー・ベースのNSTableViewをさわってみたよ
※ 記事の本題とは違いますが、CoreDataを使わないサンプルとして参考になりました
なお、サンプルコードのリポジトリがこっちに変わっているようでした。
takebayashi/ViewBasedTableSample · GitHub
下準備
- プロジェクト作成
- 「MainMenu.xib」を開く
- Windowに「NSTableView」を追加。「Columns」を1にしておく
- Objectsに「NSArrayController」を追加。「arrayController」としてAppDelegateにOutlet接続
NSTableColumnとNSArrayControllerをBind
- ValueのBind toを「Array Controller」に
- Model Key Pathを「name」に
Modelオブジェクトの作成
- NSObjectを継承したクラスを作成
- Publicな「name」プロパティを追加
ArrayControllerにデータをセット
applicationDidFinishLaunching:で以下のようにarrayControllerにデータを設定。
1 2 3 4 5 6 7 8 9 |
NSMutableArray *objects = [NSMutableArray array]; for (int i = 0; i < 30; i++) { BNModel *model = [[BNModel alloc] init]; model.name = [NSString stringWithFormat:@"name %d", i]; [objects addObject:model]; } [_arrayController setContent:objects]; |
これでTableViewに30件のデータが表示される。
ArrayControllerが面倒を見てくれるので、DataSourceの設定はいらない。
絞り込みとかも簡単にできる。
例えば、NSSearchFieldを使う場合、
- Windowに「NSSearchField」を追加
- SearchのBind toを「Array Controller」に
- Predicate Formatに「name contains $value」を指定
とするだけで、インクリメンタル検索ができるようになる。
うん、シンプルでいい感じ。
ちょっとは理解できてきたかなぁ。
あ、プロジェクトは一応こちらに置いてます。
tnantoka/ArrayControllerPractice · GitHub
それでは。
最近のコメント