CoreDataにつっこんであるデータを表示するViewを作ろうといろいろ試行錯誤してて、せっかくCoreDataでデータを管理してるのにいちいちそれを操作するコントローラを作るってのもなんだか泥臭いなと思ってたんだけど、調べたらちゃんとそれ専用のViewがあった。それがNSCollectionView。

使い方は簡単

  1. InterfaceBuilder上でNSCollectionViewを配置すると、一緒にNSCollectionViewltemとNSViewが作られる。
  2. NSCollectionViewのBindingを設定する。
    1. 「Content」を(使いたいCoreData entityを管理している)NSArrayControllerのarrangedObjectにBinding。「Model Key Path」は空のまま。
    2. 「Selection Indexes」をNSArrayControllerのselectionIndexesにBinding。「Model Key Path」は空のまま。
  3. 「Collection View Item」は既にOutletが設定されているので、特に変更することはない。
  4. Viewをいじる。
    1. 自動で作られた「View」はNSViewのインスタンスなので、カスタムビューを使う場合はこれのクラスを変更しておく。
    2. 「View」に表示したいものをぽんぽん置いてく。
    3. 配置した各項目のBindingを設定する。
      1. 「Collection View Item」にBindingする。「Model Key Path」は「representedObject.属性名」になる。

こんな感じで設定をすると、「CoreDataからデータをとってくる」→「そのデータをビューにはめこむ」→「スクロールビューに表示」までやってくれる。簡単簡単。ここまででコーディング一切なし。素敵だぜInterface Builder。残念ながらこれを使うとLeopardでしか動作しなくなっちゃうのだけど、これはかなり強力!

CoreDataとCocoaBinding

情報が少ないもんで何か難しいものと思われて敬遠されがちなんだけど、慣れてしまえばこれほど楽なものはない。データの扱いだとかUIの構築なんていう面倒なところを殆ど自作しなくてよくて、しかもそれが標準で使える機構だけでできるってのが素敵だよなー。

追記

参考にした記事を書いた人もTwitterクライアントを作ろうとしてCoreDataを弄ってらっしゃるのね。