2012-10-22 38 views
0

2012-04-18 12:58:07.108 MYiPad [12574:C07]终止应用程序由于 未捕获的异常UIViewControllerHierarchyInconsistency,原因:甲 视图只能与最多一个视图相关联控制器在 时间!查看< UITableView:0xb0eae00; frame =(0 0; 320 960); clipsToBounds = YES; autoresize = W + H; gestureRecognizers = < NSArray: 0xac460e0>;层= < CALayer:0xac46830>; contentOffset:{-0,-20}> 与< RootViewController:0xac20f20>相关联。在关联此视图之前清除此关联 。UIViewControllerHierarchyInconsistency错误 - 应用保持崩溃

第一掷调用堆栈:(0x1b57012 0x153ce7e 0x1b56deb 0x4cf309 0x5665ac 0x562a90 0x6b0232 0x4e257 0x21e3f 0x184a8c 0x19c417d 0x1836d2 0xc4c2 0x1aae59 0x1a8f22 0x1aa16a 0x1a8edd 0x1a9055 0xf6338 0x1e64a81 0x1e63d33 0x1ea1e3a 0x1af98fd 0x1ea24bc 0x1ea2435 0x1d8c3a0 0x1adaf3f 0x1ada96f 0x1afd734 0x1afcf44 0x1afce1b 0x24917e3 0x2491668 0x48165c 0x2c8d 0x2bc5为0x1)的libC++ abi.dylib:终止叫做抛出异常

* - (无效)viewDidLoad中{

[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped]; 
self.tableView.contentInset = UIEdgeInsetsMake(20.0,0.0,0.0,0.0); 
self.appDelegate = (FCDBiPadAppDelegate *)[[UIApplication sharedApplication] delegate]; 
[self.tableView setBackgroundView:nil]; 
[self.tableView setBackgroundView:[[[UIView alloc] init] autorelease]]; 
[self.tableView setBackgroundColor:[UIColor colorWithRed:217 green:220 blue:225 alpha:0.9]]; 
unsigned int b; 
NSScanner *scanner = [[NSScanner alloc] initWithString:[[[Engine sharedInstance] properties] objectForKey:@"NAVBAR_COL"]]; 
[scanner scanHexInt:&b]; 
[scanner release]; 
self.navigationController.navigationBar.tintColor=[UIColor blackColor]; 
//self.navigationController.navigationBar.tintColor=UIColorFromRGB(b); 
views = [[NSMutableArray alloc] init]; 
NSMutableArray *innerArray =[[NSMutableArray alloc] init]; 
[innerArray addObject:@"Login"]; 

txnlist = [[NSMutableArray alloc] init]; 
[txnlist addObject:@"RRLGN00"]; 
NSMutableDictionary *menu1Dict = [NSMutableDictionary dictionaryWithObject:innerArray forKey:@"MENU"]; 
[menu1Dict setObject:txnlist forKey:@"MENUKEY"]; 
[views addObject:menu1Dict]; 
Engine *myEngine = [Engine sharedInstance]; 

**[myEngine setTableview:self.tableView];** 
[myEngine settableData:self.views]; 


[super viewDidLoad]; 
self.clearsSelectionOnViewWillAppear = NO; 
self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0); 
self.navigationItem.hidesBackButton = TRUE; 

} *

我不断收到这个错误,我无法弄清楚它是什么,我做错了。我的笔尖文件,我正在使用分割视图控制器。处理菜单的根视图控制器和处理细节的明细视图控制器(显然)。当我注释掉这一行[myEngine setTableview:self.tableView]; 该应用程序将运行,我不会得到UIViewControllerHierarchyInconsistency错误,但该菜单不会加载,因为我评论它。有人请帮助我,我需要这个尽快,我的生活取决于它。再次感谢。

EDITED ----

* - (BOOL)应用:(UIApplication的*)应用didFinishLaunchingWithOptions:(NSDictionary的*)launchOptions {
[[发动机sharedInstance] setmenu_curr:@ “RRLGN00”]; [[Engine sharedInstance] setProperties:[[NSMutableDictionary alloc] initWithDictionary:[NSMutableDictionary dictionaryWithContentsOfFile:[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@“app.plist”]]]];

[[[Engine sharedInstance] properties] setObject:NSLocalizedString(@"FCDB_LANGID", nil) forKey:@"idLang"]; 

[[Engine sharedInstance] setUrl:[[[[Engine sharedInstance] properties] objectForKey:@"ENTITY_URL"] objectAtIndex:0]]; 
splashController = [[SplashViewController alloc]initWithNibName:@"SplashViewController" bundle:[NSBundle mainBundle]]; 
splashController.delegate=self; 
[self.window addSubview:splashController.view]; 
[self.window makeKeyAndVisible]; 

return YES; 

} - (无效)hideSplash { [splashController.view removeFromSuperview];

self.splitViewController =[[UISplitViewController alloc]init]; 
self.rootViewController=[[RootViewController alloc]init]; 
self.detailViewController=[[DetailViewController alloc]init]; 
UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController]; 
UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController]; 
//detailNav.navigationBarHidden=YES; 
self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailViewController,nil]; 
self.splitViewController.delegate=detailViewController; 
[window addSubview:self.splitViewController.view]; 
[self.window makeKeyAndVisible]; 

} *

我听到你在说什么,但我想我做的事情很简单的错误,或者一些简单的调整。上面的代码来自我的应用程序委托。

我检查这个网站了http://www.iriphon.com/2012/03/31/uncaught-exception-uiviewcontrollerhierarchyinconsistency-reason-child-view-controller-should-have-parent-view-controller-but-actual-parent-is-or-apples-new-uiviewcontroller-hierarc/

,我认为这可能与什么IM做的事情。我可能是错的,如果我是,请告诉我。

+0

不知道如果我正确interpresting,但我有两个视图控制器指向行中的相同视图.. self.splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav,detailViewController,nil]; self.splitViewController.delegate = detailViewController; [window addSubview:self.splitViewController.view]; – Sonic

回答

0

错误告诉你你需要知道的一切。视图只能属于它最初创建的视图控制器。

我猜EngineUIViewController的一个子类,要么或Engine包含一个视图控制器。在-setTableview:方法中,我猜测你以某种方式将表视图添加到该视图控制器。

注意:如果你真的需要这个表视图是Engine的一部分,你需要完全断绝与RootViewController的连接。在实践中,我从来没有见过这样做。

P.S. [super viewDidLoad]应该是您从-viewDidLoad拨打电话的第一件事。


评论为您更新的代码

注:我不认为这将解决您的问题,但它的设置窗口的正确方法。

请勿使用[self.window addSubview:splashController.view][window addSubview:self.splitViewController.view]。相反,它应该是self.window. rootViewController = splashControllerself.window.rootViewController = self.splitViewController

+0

我编辑了上面的帖子,并添加了一些更多的代码,请看看,让我知道你的想法。谢谢。 – Sonic

+0

不知道如果我正确interpresting,但我有两个视图控制器指向行中相同的视图.. self.splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav,detailViewController,零]; self.splitViewController.delegate = detailViewController; [window addSubview:self.splitViewController.view]; – Sonic

+0

@Sonic我不确定你想指出什么。 'self.splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav,detailViewController,nil]'是一个指向子视图控制器(合法)的控制器。 'self.splitViewController.delegate = detailViewController'正在设置一个委托(合法)。 '[window addSubview:self.splitViewController.view]'是我已经评论过的代码。 –