我在使用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)何时退出,我想在其中触发的函数是否显示一个新按钮。
感谢您的阅读,也许您可以帮助我!
干杯,
弗洛
答案 0 :(得分:0)
let nav = UINavigationController(rootViewController: roc)
在这里,您将创建一个全新的导航控制器,其根VC作为segue的目标控制器。这不会起作用 - 目标控制器将使用它需要的任何容器进行设置,而不是在prepareForSegue中创建新的视图控制器。
您想查看popoverPresentationController
的{{1}},而不是某些不会添加到屏幕的导航控制器:
rvc
}