アプリ デリゲートには、メイン アプリケーション ウィンドウとなるウィンドウ var があります。
self.window.rootViewController = anyViewController;
[self.window makeKeyAndVisible];
あなたがする必要があるのは、 のインスタンスが何であるかを決定することですanyViewController
。通常、スプラッシュ画像を提示することで「点滅」を回避します。スプラッシュ画像は、ルート ビュー コントローラーでキー ウィンドウが表示されるまで表示されます。今あなたができることは次のようなものです:
main.m
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}
}
MyAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
UserInfo * appUserInfo = [[DataManager sharedManager] applicationUserInfo];
UIViewController *anyViewController = [[ControllersManager sharedManager] launchViewControllerForUser:userInfo];
self.window.rootViewController = anyViewController;
[self.window makeKeyAndVisible];
return YES;
}
すべてのナビゲーション操作に使用するシングルトン コントローラーのマネージャーはどこControllersManager
にありますか。メソッドlaunchViewControllerForUser:
は次のようになります。
-(UIViewController*) launchViewControllerForUser:(UserInfo*) aUserInfo {
if (aUserInfo) {
return [[MainMenuViewController new] autorelease];
} else {
return [[LoginViewController new] autorelease];
}
}
そして、オブジェクトDataManager
にラップされた以前に保存されたアプリケーション ユーザーの読み取りなど、すべてのデータ操作に使用するシングルトン クラスです。UserInfo
メインウィンドウ用のnibファイルを持っている場合があります.そのようなテクニックを使いたい場合は、行をカスタマイズする必要があります.
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
同じパターンで:
self.window = [[WindowManager sharedManager] keyLaunchApplicationWindow];
また、このメソッド内でルート ナビゲーション コントローラーを割り当てることもできます。したがって、実際にこの 2 つのアプローチを組み合わせることができます。
主なアイデアは、オーケストレーション マネージャーがすべてを整理できるように準備することです。