将代理分配给PopoverPresentationController时出错

时间:2016-06-27 12:42:34

标签: ios swift

我在使用Xcode 7.3中的Swift 2.2将代理分配给PopoverPresentationController时遇到问题

使用Delegate的原因是我在按下Popover视图(类RedeemViewController)之外时试图触发一个函数返回主菜单(类MenuViewController)。这没有按钮就会发生。该功能存在于MenuViewController中,但它与现在的功能无关,所以我只是将发生错误的委托部分包括在内。

class MenuViewController: UIViewController, UIPopoverPresentationControllerDelegate {

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

  if (sender as! UIButton == btnRedeem) {
          let rvc = segue.destinationViewController as! RedeemViewController
          let nav = UINavigationController(rootViewController: rvc)
          let popover = nav.popoverPresentationController
          popover!.delegate = self
  }

 }
}

按下btnRedeem按钮,连接到Segue朝向Popover视图,RedeemViewController,导致

致命错误:在解包可选值时意外发现nil

在Xcode中,调试器指向

popover!.delegate = self

Segue存在并在故事板中命名。右键单击视图时没有警告或过时的引用。

替换代码
popover?.delegate = self

导致调试器在AppDelegate中停止的更一般的错误:

libc ++ abi.dylib:以NSException类型的未捕获异常终止

我看了here,但没有一个可能的原因适用。我有here所述的通用AppDelegate.swift。

任何帮助表示赞赏!我主要找到带按钮的示例,但不想使用按钮退出Popover,因为它不需要。

代表团的其他信息:我需要在后台运行的功能是

popoverPresentationControllerDidDismissPopover(popoverPresentationController:UIPopoverPresentationController)

检查弹出视图(RedeemViewController)何时退出,我想在其中触发的函数是否显示一个新按钮。

感谢您的阅读,也许您可​​以帮助我!

干杯,

弗洛

1 个答案:

答案 0 :(得分:0)

let nav = UINavigationController(rootViewController: roc)

在这里,您将创建一个全新的导航控制器,其根VC作为segue的目标控制器。这不会起作用 - 目标控制器将使用它需要的任何容器进行设置,而不是在prepareForSegue中创建新的视图控制器。

您想查看popoverPresentationController的{​​{1}},而不是某些不会添加到屏幕的导航控制器:

rvc

}