大文字小文字の違いで実行時エラー
MyController *newController = [[MyController alloc] initWithNibName:@"Mycontroller" bundle:nil]; UINavigationController *nav = [[UINavigationController alloc] newController];
こんな感じの良くあるコード。シミュレータだと問題なく動いてた。で、実機だと実行時にこんなエラー。
2011-02-18 14:20:38.245 MyTest[1176:307] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/xxxxxxxxx/MyTest.app> (loaded)' with name 'Mycontroller''
Xcode の Resources フォルダにちゃんと MyController.xib 入ってるし…。っていうか、ちゃんとシミュレータでは動いてるから見つからないなんておかしいじゃん!
と、あれこれ悩んでたら @"Mycontroller" の "c" が小文字だった! シミュレータだと大文字と小文字を区別しないけど、実機だと区別をしてるってことか…。シミュレータは起動しているマシンの設定によるのかな? 自分の iMac は大文字と小文字の区別をしない設定だっけ。
というわけで、以下のように修正して問題は解決。
MyController *newController = [[MyController alloc] initWithNibName:@"MyController" bundle:nil]; UINavigationController *nav = [[UINavigationController alloc] newController];
この件は以前にどこかで読んだことがある気がするけど…。自分がハマっている間はそれを思い出せないんだよな〜。