xcode4.2でStorybordを使わずにtabBarControllerにnavigationControllerを追加する方法

tabnavi


タブバーコントローラーとナビゲーションコントローラを組み合わせた実装は
xcode4.2だとストーリーボードで楽に出来ますが、iOS5未満の対応等で使えない状況があると思います。


ちなみに3.xと4.0の実装方法はこちらが参考になります。


以下、xcode4.2でStorybordを使わずにtabBarControllerとnavigationControllerを同時に使う方法です。

  1. 新規プロジェクトからTabbed Applicationを選択しUse Storybordのチェックを外して作成。
  2. AppDelegate.mのdidFinishLaunchingWithOptionsを以下のようセに修正
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// メインウィンドウ
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // ViewControllersを入れる配列
    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
    
    // トップのビュー
    FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    // ナビゲーションコントローラーを追加
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController1];
    [viewControllers addObject:navController];
    
    // メニューのビュー
    SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    // ナビゲーションコントローラーを追加
    UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
    [viewControllers addObject:navController2];
    
    // タブバーコントローラーを作成
    self.tabBarController = [[UITabBarController alloc] init];
    // タブバーコントローラーにナビゲーション付きのビューを追加
    [self.tabBarController setViewControllers:viewControllers];
    
    // 表示
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    
    return YES;
}

以上で完成。

これで遷移にナビゲーションも使えます。


ワンライナーでループ処理

シェルで1行で繰り返し処理をするならreadが便利。
以下はphpの構文チェックを一括で行う例

$ find . -name "*.php" | while read file; do php -l $file; done;
No syntax errors detected in ./a.php
No syntax errors detected in ./b.php
No syntax errors detected in ./c.php

SQLのORDER BYが遅い時の確認

  • 単体インデックスだとorder byでソートが使われない
    • 複合インデックスを検討。
  • バインド変数を使えば早くなるとは限らない。
    • 特に範囲指定の時)