0

次のコードでクラッシュに直面しています。シナリオは

これは、UINavigationControllerを使用してRTC_HomeVCをロードするアプリデリゲートメソッドです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
RTC_HomeVC *obj_RTC_HomeVC=[[RTC_HomeVC alloc]init];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:obj_RTC_HomeVC];
// Override point for customization after application launch.
self.window.rootViewController=nav;
[obj_RTC_HomeVC release];
[nav release];

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}

次に、親ナビゲーションコントローラー内でUINavigationControllerを開きます。だから私は次のコードを使用します。メソッド-(IBAction)call_SectionFlowはRTC_HomeVCにあります。


-(IBAction)call_SectionFlow{
RTC_1_StoreDetailsVC *obj_StoreDetailsVC=[[RTC_1_StoreDetailsVC alloc]initWithNibName:@"RTC_1_StoreDetailsVC" bundle:nil];
RTC_3_EnablingWorksVC *obj_EnablingWorksVC = [[RTC_3_EnablingWorksVC alloc]initWithNibName:@"RTC_3_EnablingWorksVC" bundle:nil];
UINavigationController *navController_Sections = [[UINavigationController alloc] init];
NSArray *array_ControllerArray=[[NSArray alloc]initWithObjects:obj_StoreDetailsVC,obj_EnablingWorksVC, nil];
[navController_Sections setViewControllers:array_ControllerArray animated:FALSE]
navController_Sections.view.frame=CGRectMake(14, 40, 996,636 );
[self.view addSubview:[[[navController_Sections viewControllers] objectAtIndex:0] view]];
}

このメソッドを呼び出すと、アプリケーションがクラッシュします。これはクラッシュログです。

クラッシュログ: *キャッチされなかった例外によるアプリの終了'UIViewControllerHierarchyInconsistency'、理由:'子ビューコントローラー:<RTC_1_StoreDetailsVC:0x71f53a0>には親ビューコントローラーが必要です:<RTC_HomeVC:0x758b310>ただし、実際の親は:<UINavigationController:0x71f55d0> 'スローコールスタック:(0x1c9c012 0x10d9e7e 0x1c9bdeb 0x6838a 0x68739 0x6f5a3 0x67eed 0x4fc3 0x10ed705 0x24920 0x248b8 0xe5671 0xe5bcf 0xe4d38 0x5433f 0x54552 0x323aa 0x23cf8 0x1bf7df9 0x1bf7ad0 0x1c11bf5 0x1c11962 0x1c42bb6 0x1c41f44 0x1c41e1b 0x1bf67e3 0x1bf6668 0x2165c 0x1f82 0x1c45)のlibc ++ abi.dylib:例外をスロー呼ばTERMINATE


だから誰でも教えてくれる

  1. このコードの何が問題になっていますか?そして、このクラッシュを解決するために私が従うべきアプローチはどれですか?
  2. 既存のUINavigationControllerで別のUINavigationControllerを開く方法は?

ありがとう。

4

1 に答える 1

2

サブビューを手動で追加しないでください。UIWindowサポートされていません (または、少なくとも正常に動作しません)。

次の方法を使用します。

[firstNavigationVC presentViewController:secondNavigationVC animated:YES completion:nil];

クラッシュの原因はobj_StoreDetailsVC、新しいナビゲーション コントローラーに追加してから、そのビューをself.view. VC が別の VC の子になると、そのviewVC の子孫である必要がありますviewsecondNavigationVCのビューを のビューに追加できるかもしれませんがfirstNavigationVC、それは UIKit の動作方法ではありません。上記の方法を使用します。

于 2013-02-06T07:12:26.147 に答える