我的应用程序中有两个视图。主视图(ViewController.swift)和侧边栏(SideBar.swift)。如果我在侧边栏中按下一个按钮,则应显示UIAlertView
(我在ViewController.swift中调用一个函数)。但应用程序崩溃是因为主视图为零。你知道我怎么解决这个问题吗?
我在函数中的代码(显示警告):
let alertView = UIAlertController(title: "You need to log in first", message: "To access the special features of the app you need to log in first.", preferredStyle: .Alert)
alertView.addAction(UIAlertAction(title: "Login", style: .Default, handler: { (alertAction) -> Void in
}))
alertView.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
self.presentViewController(alertView, animated: true, completion: nil)
崩溃日志:
0x724160 <+60>: bl 0x75961c ; function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded> of Swift.(_fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ()).(closure #2)
-> 0x724164 <+64>: trap
答案 0 :(得分:2)
我想到了两种解决方案。
首先,在我们的SideBar.swift中定义一个协议(让我们称之为AlertDelegate)。
protocol AlertDelegate {
func alertMain()
}
现在我们在SideBar.swift中创建一个委托变量。
var alertDelegate:AlertDelegate?
然后我们使MainView(ViewController.swift)遵守AlertDelegate协议。
class ViewController: UIViewController,foo,bar,AlertDelegate
并添加AlertDelegate协议的功能。您可以在此处放置UIAlertController代码。
func alertMain(){
//Present UIAlertController
}
最后,我们必须将ViewController设置为委托 alertDelegate
使用AppDelegate KeyWindow呈现您的UIAlertController。我可能不会推荐这种方法,但这就是你要做的。
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(alert, animated: true, completion: nil)