Hatena::Groupiphone-dev

haoyayoi Dev Style このページをアンテナに追加 RSSフィード

2009-04-14

InterfaceBuilderから決別するほうほう

| 22:52 | InterfaceBuilderから決別するほうほう - haoyayoi Dev Style を含むブックマーク はてなブックマーク - InterfaceBuilderから決別するほうほう - haoyayoi Dev Style InterfaceBuilderから決別するほうほう - haoyayoi Dev Style のブックマークコメント

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の無限生成ループが発生することもあります。