如果我使用多个"if statements"则在swift中遇到错误(由于未捕获的异常而终止应用程序)



我使用PopoverView来显示tableview单元格按钮中的选项,就像这个屏幕截图

这里的如果我像这样使用no error..但如果用if statements检查条件然后出现崩溃和错误

@objc func showOptions(sender:UIButton) {

popoverView?.show(with: ["View", "View Proposal", "Delete"], sender: sender, showDirection: .up)
}

但是这里对于每个单元格,我需要根据以下条件显示不同的选项

单元格按钮动作代码在这里打开,关闭,进行中…都是分段模式

@objc func showOptions(sender:UIButton) {

if mode == .Open{
popoverView?.show(with: ["View", "View Proposal", "Delete"], sender: sender, showDirection: .up)
}
if (mode == .Open) && (bidsCount > 0){
popoverView?.show(with: ["View", "View Proposal", "Edit", "Delete"], sender: sender, showDirection: .up)
}
if mode == .In_progress{
popoverView?.show(with: ["View", "View Proposal", "Delete"], sender: sender, showDirection: .up)
}
if mode == .Awarded{
popoverView?.show(with: ["View", "Delete"], sender: sender, showDirection: .up)
}
if mode == .Closed{
popoverView?.show(with: ["View"], sender: sender, showDirection: .up)
}
}

PopoverView代码:

extension PageContentViewController: PopoverViewDelegate {
func value(didSelect item: String, at index: Int, indexPath: IndexPath, sender: UIView) {
if item == "View" {
let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "VC1") as? VC1
self.navigationController?.pushViewController(vc!, animated: true)
}
if item == "View Proposal" {
let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "VC2") as? VC2
self.navigationController?.pushViewController(vc!, animated: true)
}
if item == "Post Review" {
let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "VC3") as? VC3
self.navigationController?.pushViewController(vc!, animated: true)
}
}

错误:

由于未捕获异常'NSInvalidArgumentException'而终止应用程序,原因:'应用程序试图以模式呈现视图控制器'这是TestApp已经呈现的。SideMenuController: 0 x7fdb36659370>。">

if mode == .Open{
popoverView?.show(with: ["View", "View Proposal", "Delete"], sender: sender, showDirection: .up)
}
if (mode == .Open) && (bidsCount > 0){
popoverView?.show(with: ["View", "View Proposal", "Edit", "Delete"], sender: sender, showDirection: .up)
}

显示一个弹出窗口,然后显示第二个弹出窗口,这是不允许的。当(mode == .Open) && (bidsCount > 0)为真时,mode == .Open也为真。

你可能想重新排序这些,并使用else if而不仅仅是if

但是,一般来说,这可以用switch语句来完成,例如:

switch mode {
case .Open where bidsCount > 0:
...
case .Open:
...
case .In_progress:
...
...
}

(注意在Swift中枚举的大小写通常是骆驼大小写。所以这些通常是.open.inProgress。)

最新更新