2009-04-14
InterfaceBuilderから決別するほうほう
xcode | |
![]()
4月からiPhoneアプリ開発のお仕事に就きました。家でも会社でもobjcな毎日です。
開発上、できるだけソースコードの編集だけで色々な改変を行いたいものですが、割とInterface Builderの呪縛があなどれません。慣れると視覚的ですけど、それでもやはり手間です。
業務の開発をしつつ、IBの依存を消す方法を探した結果、とりあえず形になったのでメモ。
main.m
UIApplicationMain()の最後の引数を、xxxxAppDelegateに書き換えます。
int main(int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, @"HogeHogeAppDelegate"); [pool release]; return retVal; }
info.plist
「Main nib file base name」の行をCut
Controller系
initxxxとviewDidLoad、loadViewあたりを継承。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Custom initialization } return self; } - (void)loadView { [super loadView]; }
継承しわすれると、画面に何も表示されない場合があるのでほんとに要注意。
多重Controllerの生成
UITabBarController > UINavigationController > UITableViewController という重なり形で生成する場合、UINavigationController内のUITableViewController等のController生成は、UITabBarControllerのinitメソッドか、UIWindow生成時などで一括にて。
やりかたをちょっと誤るだけで、UIViewControllerの無限生成ループが発生することもあります。
コメントを書く