【问题标题】:ios: Navigation to another screen using modalTransitionsytle attribute, crashes the appios:使用 modalTransitionsytle 属性导航到另一个屏幕,导致应用程序崩溃
【发布时间】:2011-12-09 11:29:03
【问题描述】:

我有导航界面,每次按下设置按钮时,我都会使用它弹出设置屏幕。

@interface Navigation : UINavigationController
{
}
-(void)popToMainMenuAnimated:(BOOL)animated;

//.m file
-(void)popToMainMenuAnimated:(BOOL)animated
{
    UIViewController *element;
    for(element in self.viewControllers)
    {
        if([element isKindOfClass:[MainSettingClass class]]){
          self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
          [self presentModalViewController:element animated:YES]
        }
     }
}

应用程序因以下异常而崩溃。

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图以模态方式呈现活动控制器。” * 首先抛出调用栈:

注意:这不是根屏幕,而是我的应用程序的第三个屏幕。

【问题讨论】:

    标签: iphone ios cocoa uinavigationcontroller


    【解决方案1】:

    根据您提供的调试日志,我通过搜索得到了一个原因:
    您之前推送的MainSettingClass 实例既不能再次推送到navigationController 上的数组,也不能以模态方式呈现。您应该创建一个新的 MainSettingClass 实例并呈现它,就像第二个代码 sn-p 一样。

    HERE 是一个提到Application tried to present modally an active controller 的相关问题。 :)

    -(void)popToMainMenuAnimated:(BOOL)animated
    {
        UIViewController *element;
        for(element in self.viewControllers) {
            if([element isKindOfClass:[MainSettingClass class]]) {
                self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
                [self presentModalViewController:element animated:YES];
                break;
            }
        }
    }
    

    但为什么不是load Main Menu 而不是pop

    -(void)loadMainMenuAnimated:(BOOL)animated
    {
        MainSettingClass * mainMenuViewController = [[[MainSettingClass alloc] init] autoreleased];
        [mainMenuViewController.view setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
        // ...
        self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
        [self presentModalViewController:mainMenuViewController animated:YES];
    }
    

    而且你展示的代码有一些错误:

    self.modalTransitionStyle= UIModalTransitionStylePartialCurl;
    [self popToViewController:element animated:YES];
    

    self.modalTransitionStyle= UIModalTransitionStylePartialCurl;如果你设置了这个,你需要使用

    [self presentModalViewController:yourViewController animated:YES];
    

    不是

    [self popToViewController:element animated:YES];
    

    【讨论】:

    • 我按照建议进行了更改,但这导致我的应用程序崩溃。以前只有过渡属性没有被遵守,无论我选择什么风格,它总是以默认方式过渡。
    • 使用 [self popToViewController:element animated:YES] 正确进行转换;但我希望转换不是默认的,而是 UIModalTransitionStylePartialCurl 的。当我尝试您的更改时: [self.modalTransitionStyle= UIModalTransitionStylePartialCurl; [自我presentModalViewController:元素动画:是];应用崩溃。
    • @RakeshSingh 我很抱歉我的错误。现在怎么样?
    • 还是没有运气。我只想通过弹出视图使用。应用程序仍然因 BAD_MEMORY_EXCESS 而崩溃
    • @RakeshSingh BAD_MEMORY_EXCESS,你的意思是 EXC_BAD_ACCESS?也许您需要找出导致此崩溃的原因,请参阅THIS 答案以找出答案。 :)
    【解决方案2】:

    您选择并尝试呈现(模态)的“MainSettingsClass”UIViewController 似乎已经处于活动状态。如果您在此视图控制器之前可能已推送/呈现(理想情况下弹出/关闭)的位置放置代码,将会有所帮助。

    这里有一个couple related 的问题可能对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多