3

以下のコードを使用して、ルートビューコントローラーを初期化しました

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

{

[window addSubview:rootViewController.view];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController: rootViewController  ];
}

それはios4で約2年、ios5 1年でうまく機能し、アプリの実行を開始しても問題はありませんが、ios6ではクラッシュして報告されました

*キャッチされなかった例外「UIViewControllerHierarchyInconsistency」が原因でアプリを終了します。理由:「ルートビューコントローラーをビューコントローラーの子として追加します:」

コメントを歓迎します

4

2 に答える 2

5

'rootViewController'はすでにビュー階層にあります。最初に(window.rootViewController?)にある他のコンテナからそれを削除します(window.rootViewController = nil)。

于 2012-09-27T11:36:21.073 に答える
2

コードでは、rootViewControllerのビューをウィンドウに追加し、すぐにrootViewControllerのビューを新しいUINavigationControllerに追加しようとしています。代わりにこれを試してください:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...    

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    [window addSubview:nav.view];

    ...
}

またはさらに良い:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...    

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    window.rootViewController = nav;

    ...
}

...は、これらがの不完全な例であることを示すためにあり-application:didFinishLaunchingWithOptions:ます。UIWindowの作成と呼び出しが含まれていることを確認する必要があります-makeKeyAndVisible

于 2012-09-27T12:02:29.103 に答える