我有一个_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/

10-12 21:27