iOS開発の新機能は、developer.apple.comのチュートリアルに従っています。プログラムによるビューコントローラへのアクセス
"second ios app"チュートリアルでは、ナビゲーションコントローラベースのアプリケーションを提供しています。このアプリケーションを拡張すると、私は最初のビューコントローラとしてタブバーコントローラを持っている。
だから私は今、次のセットアップがあります。
すべて良いです。しかし、BirdsAppDelegate(UIApplicationDelegate)には、ルートコントローラーであるナビゲーションコントローラーに依存するコードがあり、 "datacontroller"オブジェクトを作成して割り当てることができます。 (私はタブバーコントローラを追加する前に)
これは元のコードです:それは、ルートビューコントローラがナビゲーションコントローラであると仮定しているため
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
BirdsMasterViewController *firstViewController = (BirdsMasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init];
firstViewController.dataController = aDataController;
return YES;
}
は今、このコードは失敗します。
それが動作するように私は、コードを更新した- しかし、私の意見では、それは醜いです、と私はビューコントローラの階層に変更を加えるたびに変更しなければなりません:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController = (UINavigationController *) [[tabBarController viewControllers] objectAtIndex:0];
BirdsMasterViewController *firstViewController = (BirdsMasterViewController*) [[navigationController viewControllers] objectAtIndex:0];
BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init];
firstViewController.dataController = aDataController;
return YES;
}
だから私の質問を上のコードで私がやっていることを行う良い方法は何ですか?階層への変更がコードを破らないようにするには?
アプリケーションデリゲートの後のビューコントローラにプログラムでアクセスして、BirdSightingDataControllerオブジェクトを作成して割り当てることができますか?
ありがとうございます!
素晴らしい - それです!素敵で簡単です:) – Stretch