我有一个_MainViewController,在它的视图中,我有2个子视图,
_MenuViewController.view显示菜单,始终位于最前面。
_MenuViewController.view之后的另一个视图发生了变化
根据菜单中选择的内容。所以
_MenuViewController.view是一个叠加层。
现在,为了更改后面的视图,我创建了以下函数:
UIViewController * ReplaceSubViews(UIViewController *present,NSString *vcid,NSString *storyboard_id)
{ //present: present 'behined' view,
//vcid: storyboard if of view to replace with behined
if(storyboard_id==nil) storyboard_id=@"UI";
[present.view removeFromSuperview];
UIStoryboard *storybrd=[UIStoryboard storyboardWithName:storyboard_id bundle:nil];
UIViewController* future;
if(vcid==nil)
future= [storybrd instantiateInitialViewController];
else
future= [storybrd instantiateViewControllerWithIdentifier:vcid];
[_MainViewController.view addSubview:future.view];
[_MainViewController.view bringSubviewToFront:_MenuViewController.view];
return future;
}
现在,按钮事件touchUpInside调用该函数。
替换后,它将自己的viewcontroller实例设为nil。
这是视图控制器的实例(全局变量):
UIViewController *_MyViewController;
现在,按钮的动作:
- (IBAction)ShowARView:(id)sender {
ReplaceSubViews(self, nil, @"CamController");
double delayInSeconds = 2.0;
_MyViewController=nil; //App Crashes on this
}
我什至尝试通过以下方法延迟无效过程:
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
_MyViewController=nil; //This is basically self
});
但是应用仍然崩溃。请帮忙。
https://docs.google.com/drawings/d/1qqg7g2Hx3WAdC7SfGB4XpNDjuyNzZqFKlf55zED5x88/pub?w=272&h=256
我的代码已启用ARC。
最佳答案
您不应使用一个ViewController并将其视图更改为一种导航,这不是视图控制器的目的。
每个(根)视图都应具有自己的控制器。使用导航控制器之类的工具,我认为您的导航效果不佳。
关于ios - 在iOS中设置全局变量后,我的应用程序崩溃了,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23518113/