Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

CollectionViewを使おうと思ってSwiftでCocoaBindingを使ってみた

XCode Version 7.1.1 (7B1005) Swift2.1で試しました。

iOSのアプリは書いたことがあったけど、OSXのアプリは書いたことがなくて色々ハマっている。 iOSだったらUIXXってクラスを使ってGUIを構築してたけど、OSXだとNSXXってクラスを使っていくようだ。

iOSにはなかった気がするけど、CocoaBindingという機能があるらしい。かなり前からあるみたいだけど、普段はWPFでMVVMなコードを書いているのでVM的なものが簡単に実装できるのですごく便利そうだ。

Cocoa Binding : バインディングって何なのさ

ちなみに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と同じつもりでコードを書いてるとちょこちょこハマってしまうのが辛い・・・