Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从自定义UISplitview导航回_Ios_Xcode_Ios6_Xcode4.5_Uisplitviewcontroller - Fatal编程技术网

Ios 从自定义UISplitview导航回

Ios 从自定义UISplitview导航回,ios,xcode,ios6,xcode4.5,uisplitviewcontroller,Ios,Xcode,Ios6,Xcode4.5,Uisplitviewcontroller,在我的iPad应用程序中,我有一个主菜单屏幕。。上面有各种各样的图标 点击图标时,它会引导我找到自定义UISplitViewController。我用这个代码做的。在SplitView中,一切正常 问题:点击主视图控制器导航栏中的按钮,我将面临返回主菜单屏幕的问题 自定义UIsplitview的代码:- self.navigationController.navigationBarHidden = NO; self.navigationController.navigationBar.barSt

在我的iPad应用程序中,我有一个主菜单屏幕。。上面有各种各样的图标

点击图标时,它会引导我找到自定义UISplitViewController。我用这个代码做的。在SplitView中,一切正常

问题:点击主视图控制器导航栏中的按钮,我将面临返回主菜单屏幕的问题

自定义UIsplitview的代码:-

self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

left = [[LeftViewController alloc] initWithStyle:UITableViewStylePlain];
UINavigationController *leftNav = [[UINavigationController alloc] initWithRootViewController:left];
right = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil];
UINavigationController *rightNav = [[UINavigationController alloc] initWithRootViewController:right];
left.right = right;

splitViewController = [[UISplitViewController alloc] init];    
splitViewController.viewControllers = [NSArray arrayWithObjects:leftNav,rightNav, nil];

splitViewController.delegate = right;

appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UISplitViewController *cvc = (UISplitViewController *) splitViewController;
[appDelegate.window setRootViewController:cvc];
编辑:自定义按钮代码

UIButton *a1 = [UIButton buttonWithType:UIButtonTypeCustom];
[a1 setFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[a1 addTarget:self action:@selector(menu:) forControlEvents:UIControlEventTouchUpInside];
[a1 setImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal];
UIBarButtonItem *random = [[UIBarButtonItem alloc] initWithCustomView:a1];
left.navigationItem.leftBarButtonItem = random;

- (void)menu {

[self.view removeFromSuperview];
ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

[appDelegate.window setRootViewController:vc];
[vc release];

}
这会导致崩溃,并显示EXC_BAD_访问消息


请指导我。

我不确定这是一个好的设计。从主菜单屏幕床边到分割视图控制器,您还可以做些什么

如果您想保留这种设计,您可以执行在发布代码末尾所做的相同操作——在按钮的操作方法中,创建主菜单控制器的实例,并将其设置为窗口的根视图控制器

编辑后:

我可以看到一个肯定会造成崩溃的问题——当您创建按钮时,您将操作设置为“menu:”,但您的方法实现只是“menu”,没有冒号或参数。去掉冒号,一切都会好起来的

我不认为这三条线会造成麻烦,但没有必要做你正在做的事情:

appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UISplitViewController *cvc = (UISplitViewController *) splitViewController;
[appDelegate.window setRootViewController:cvc];
您已经拥有属性或ivar、splitViewController,无需将其重新分配给cvc。此外,无需获取应用程序代理,您可以使用self.view.window获取窗口。因此,这3行可以更改为:

self.view.window.rootViewController = splitViewController;

我假设您可以通过从断点单步执行来查看崩溃发生在代码的哪一行

老实说,我不喜欢这里的软件设计,因为我不会使用UISplitViewController子类。我更可能使用UIViewController包含API创建自定义SplitViewController,然后将其与UINavigationController结合使用


也就是说,如果必须使用UISplitViewController子类,那么我建议使用所有代码在主appDelegate窗口中添加或删除ViewController,然后使用通知通知appDelegate何时添加或删除相关的ViewController(切换根)。通过这种方式,您可以减少同一视图控制器的多个实例可能会导致内存问题。试图让viewController从其父级中删除自身总是很棘手的,最好由父级或更高级别的实体(在本例中为主应用程序委托)管理。

@ibiren,您应该编辑您的问题以显示您尝试的代码,以及崩溃时出现的错误。