0

2012-04-18 12:58:07.108 MYiPad[12574:c07] 例外 UIViewControllerHierarchyInconsistency がキャッチされていないため、アプリを終了しています。ビュー < UITableView: 0xb0eaae00; フレーム = (0 0; 320 960); clipsToBounds = YES; 自動サイズ変更 = W+H; GestureRecognizers = < NSArray: 0xac460e0>; 層 = < CALayer: 0xac46830>; contentOffset: {-0, -20}> は < RootViewController: 0xac20f20 > に関連付けられています。このビューを に関連付ける前に、この関連付けをクリアしてください。

First throw call stack: (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 : 例外をスローして呼び出された終了

*- (void)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;

}*

このエラーが発生し続け、何が間違っているのかわかりません。私のnibファイル、私は分割ビューコントローラーを使用しています。メニューを処理するルート ビュー コントローラーと、詳細を処理する詳細ビュー コントローラー (明らかに) 。この行をコメントアウトすると [myEngine setTableview:self.tableView]; アプリは実行され、UIViewControllerHierarchyInconsistency エラーは発生しませんが、コメントアウトしているためメニューは読み込まれません。誰かが私を助けてください、私はこれができるだけ早く必要です、私の人生はそれに依存しています. 再度、感謝します。

編集済み----

*- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[Engine 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;

} - (void)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/

そして、それは私がしていることと関係があるかもしれないと思います. 間違っているかもしれませんが、もし間違っていたら教えてください。

4

1 に答える 1

0

エラーはあなたが知る必要があるすべてをあなたに伝えています。ビューは、元々作成されたビューコントローラにのみ属することができます。

EngineのサブクラスでUIViewControllerあるか、ViewControllerがEngine含まれていると思います。この-setTableview:方法では、なんとかしてそのViewControllerにテーブルビューを追加していると思います。

注:このテーブルビューをの一部にEngineする必要がある場合は、との接続を完全に切断する必要がありますRootViewController。実際には、私はこれが行われるのを見たことがありません。

PS[super viewDidLoad]は、から呼び出す最初のものである必要があります-viewDidLoad


更新されたコードへのコメント

注:これで問題が解決するとは思いませんが、ウィンドウを設定する正しい方法です。

[self.window addSubview:splashController.view]とを使用しないでください[window addSubview:self.splitViewController.view]。代わりに、とする必要がself.window. rootViewController = splashControllerありself.window.rootViewController = self.splitViewControllerます。

于 2012-10-22T14:33:49.763 に答える