Modal UINavigationController隐藏虽然没有解散

时间:2012-09-26 07:43:26

标签: objective-c ios uinavigationcontroller

好的,所以我正在构建一个带有初始登录视图的通用iOS应用程序(名为LoginVC的视图控制器),只是一个简单的简单UIViewController。如果登录成功,则应用程序将转向导航控制器(MainNavigationVC)。我通过XCode的故事板gui创建了这个segue,因此没有编程创建导航控制器。导航控制器以全屏模式呈现,因此应用程序的其余部分在登录视图的顶部运行,此导航控制器作为所有内容的核心。

导航控制器包含一个视图(具有名为UserStartPageVC的视图控制器),并且在其导航栏中是一个注销按钮。此按钮向UserStartPageVC发送目标操作,目标是解除导航控制器,从而将用户带回登录视图。

到目前为止一切正常。我可以按预期登录并使用该应用程序。但!当我退出然后重新登录时,XCode告诉我:

  

警告!尝试出现< MainNavigationVC:0x753110>上   < LoginVC:0x756fcf0>演示文稿正在进行中!

我想这意味着登录视图正在尝试以模态方式显示MainNavigationVC导航控制器,但是已经显示了另一个,对吧?但是怎么样?可以在不显示的情况下呈现视图吗?

退出时如何摆脱旧的导航控制器?我已经尝试了几种解除模态视图的方法,例如:

    从运行

    的UserStartpageVC中
  • [x dismissViewControllerAnimated:YES completion:NULL]

    [x dismissModalViewControllerAnimated:YES]

其中x是self,self.parentViewController或self.presentingViewController。

  • 将LoginVC设置为UserStartpageVC中的属性并运行

    [self.loginVC dismissViewControllerAnimated:YES completion:NULL]

等等。

所有经过测试的电话实际上都会让我回到登录界面,因此有点工作。

有什么想法吗?如有必要,可以提供相关的代码示例,我只是无法弄清楚哪些是感兴趣的部分。对导航控制器的搜索没有代码(performSegueWithIdentifier:sender :)除外,解雇它的代码是我似乎无法直接得到的部分。

作为旁注。到目前为止,这不是一个真正的问题;应用程序运行,并且可以注销和重新登录,而不会产生任何其他副作用,而不是XCode中的错误消息。但是我认为如果用户多次登出并登录,这将是一次内存泄漏,而且我没有心情遭到Apple的不必要的拒绝。

2 个答案:

答案 0 :(得分:3)

我发现了另一种获取完全相同错误消息的方法。幸运的我!

如果您在某一点创建了一个segue并将其绑定到一个按钮(单击按钮 - >新视图),然后稍后给该segue命名并使用

直接调用它
[self performSegueWithIdentifier:@"identifierName" sender:self];

然后你可以得到这个错误,因为你可以有效地触发segue两次。我认为让按钮调用IBAction会关闭我在第一时间设置的segue,但显然不是。按下按钮会触发segue两次,但是在我删除segue并在视图上使用相同的标识符重新创建它作为手动segue之后我就可以通过上面的代码调用它而不会收到警告消息。

答案 1 :(得分:0)

喧闹!我的坏。

似乎我已经以愚蠢的方式设置了通过登录API调用观察的通知。每次用户触发登录(或重新登录)时,它都会将自己添加为通知的观察者;结果是每次登录都会再执行一次segue。

同时做多个细分,是......好吧,显然很糟糕。