2011/05/14

リファクタリングの罠

ほんの軽い気持ちで行ったリファクタリングが原因でちょっとハマってしまったので、備忘録として記載しておく。

現在作成中のアプリに機能追加をしている最中、ViewControllerのクラス名(ファイル名も同名)にTypoを見つけた。
Nibファイルと同時に作成したViewControllerだ。
早速、XCode4のRefactor機能を使って修正した。

しばらく実装中の機能を仕上げて、さて動作確認をするかと動かしてみると、なぜか今まで動いていた機能が動かない。
調べてみると、ViewControllerのviewDidLoadの段階で、InterfaceBuilderを使ってNibファイルにマッピングされたはずのメンバのポインタが軒並み0x0を指していた。
つまり、Nibファイルへのマッピングが外れていた。

この現象の原因は、クラス名のリファクタリングを行った際、XCodeは関連するシンボルを検索して置き換えを行ってくれるが、同時に作成したNibファイルのファイル名は置き換え対象になっていないらしい。
(File'sOwnerのクラス名は書き換えているらしい)
さらに、InterfaceBuilderを使用する場合だけかもしれないが、Nibファイルのファイル名は該当ViewControllerのクラス名と一致している必要があるようだ。

なにわともあれ、コードの変更中に、何かのついでにリファクタリングをかけるのは避けよう。
副作用に気づかないままリファクタリングをかけた事を忘れて、貴重な時間を無駄にしかねない。

0 件のコメント:

コメントを投稿