CollectionViewを使おうと思ってSwiftでCocoaBindingを使ってみた
XCode Version 7.1.1 (7B1005) Swift2.1で試しました。
iOSのアプリは書いたことがあったけど、OSXのアプリは書いたことがなくて色々ハマっている。 iOSだったらUIXXってクラスを使ってGUIを構築してたけど、OSXだとNSXXってクラスを使っていくようだ。
iOSにはなかった気がするけど、CocoaBindingという機能があるらしい。かなり前からあるみたいだけど、普段はWPFでMVVMなコードを書いているのでVM的なものが簡単に実装できるのですごく便利そうだ。
ちなみにAppleのドキュメントはこちら developer.apple.com
下のリンクを参考にしながら、コピペでコードを書いてたところ少しハマったのでまとめておく qiita.com
ビルドが通らなくなる
Storyboard上でCollectionViewを追加したところ
Unknown segue relationship : Prototype
というようなエラーが出てビルドが通らなくなってしまった。
答えはこちら。 stackoverflow.com
追加したタイミングで、CollectionViewからCollectionViewItemへのsegueが登録されていた。これが犯人らしく、一度CollectionViewItemを削除して、CollectionViewItemを追加したらビルドが通った。 stackoverflowの通り手動でItemViewの関連づけをしてやる必要がある
実行時にエラーが出た
[73280:1183774] *** NSForwarding: warning: object 0x6080000454f0 of class 'Foo.Bar' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[Foo.Bar addObserver:forKeyPath:options:context:]
のようなエラーが出た。バインド元になっている自分で定義したクラスにインターフェイスがないとのこと。NSObjectを継承させることでうまくいった。
iOSと同じつもりでコードを書いてるとちょこちょこハマってしまうのが辛い・・・