unrecognized selector

またもや皆が通る試練を受けてしまったようだ。

次のネタにする予定だった、KVOの発展系のテストをしていたのだが、外部に定義したカテゴリのメソッドを使うと何故か例外が発生してメソッドが実行できない。

[]:〜unrecognized selector sent to instance 0x1e85e30

特定のメソッドで発生しているようだが、外部の静的ライブラリィで定義されたカテゴリのメソッドである他は何も特別なものではない。

しかし、この「静的ライブラリィ」というのが曲者だったのである。
Technical Q&A QA1490: Technical Q&A QA1490 - Mac OS X Developer Library

なんと、Objective-Cのリンカのバグで、静的ライブラリ内で実装されているカテゴリを呼ぶ場合に同エラーが発生してしまうらしいのだ。
解消方法は、プロジェクトターゲットの"Build Settings"中、パラメタ"Other Linker Flags"に"-ObjC"、更には"-all_load"を追加して再ビルドすること。

はぁぁぁぁぁぁぁぁん。
どうしてこんなバグ放置されているんだ? 必要ならデフォルトでオンにしておいてくれよ、と言いたいバグ。

これでまた1日潰してしまった。