在演示或解雇正在进行时,尝试从视图控制器<uinavigationcontroller:0x717f0f0 =“”>中解除</uinavigationcontroller:>

时间:2013-10-14 00:59:40

标签: iphone ios

我是iOS新秀。我有一个嵌入在导航控制器中的表视图。另一个表视图也嵌入在导航控制器中。第一个表视图ChecklistsView显示第二个表视图ItemDetailView。 ChecklistView的导航控制器'+'按钮打开ItemDetailView场景。点击ItemDetailView的Cancel按钮可关闭ItemDetailView,但会显示上面提到的消息。以下是Cancel方法的代码:

- (IBAction)cancel
{
    [self.delegate itemDetailViewControllerDidCancel:self];
}

这是取消方法中使用的委托方法:

- (void)itemDetailViewControllerDidCancel:(ItemDetailViewController *)controller
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

任何建议将不胜感激。我已经查看了有关此警告的其他帖子,但它们高于我的专业水平。

2 个答案:

答案 0 :(得分:0)

你不应该让委托解雇viewController。

相反,您应该使用presentViewController上的.presentingViewController属性来解除它。

像这样:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

答案 1 :(得分:0)

我不同意AdamG。你正在做的是正确的; Apple也使用这种设计,代表解散控制器(查看MFMessageComposeViewController)。

回到问题,如果我理解正确,并且你有以下结构(原谅这些条款,但你会得到主旨):

  • 顶部的UINavigationController
  • ChecklistsViewController是导航控制器的根视图控制器
  • ItemDetailViewController作为模态视图控制器
  • ChecklistsViewControllerItemDetailViewController
  • 的代表

这只是您案例中的实施细节。

- (void) itemDetailViewControllerDidCancel: (ItemDetailViewController*) controller
{
    [controller dismissViewControllerAnimated: YES
                                   completion: nil];
}