我有一个tableview,我点击公开按钮(i)以模态显示另一个视图。每次出现模态视图时,应用程序都会因此错误而崩溃;
NSInvalidArgumentException',原因:'应用程序试图呈现 模态地是一个主动控制器
这是在ExamTableView上调用的;
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showHTML" {
let vc : HTMLViewController = segue.destinationViewController as! HTMLViewController
vc.htmlFile = htmlFile
presentViewController(vc, animated: true, completion: nil)
}
通过点击ExamTableView中的按钮调用它;
override func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
let examListing = exams[indexPath.row]
htmlFile = examListing.htmlFile!
print("File: " + htmlFile)
self .performSegueWithIdentifier("showHTML", sender: self)
}
我得到了新视图的viewDidLoad,因为我得到了htmlFile变量的打印。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print(htmlFile)
}
但是一旦模态视图落在屏幕上,应用就崩溃了。我可以看到它到了,但它已经消失了。 毋庸置疑,我是Swift的新手,当然还有Swift 2。
那里的任何人都可以看到我做错了什么?
答案 0 :(得分:2)
您不应该在prepareForSegue中调用presentViewController,只需删除该行即可
self .performSegueWithIdentifier("showHTML", sender: self)
它会起作用 - 假设您在故事板中正确设置了segue
在准备segue时,您应该通过传递相关参数来准备目标viewcontroller。在转换发生之前调用PrepareForSegue
- 假设shouldPerformSegue
返回true。
在presentViewController
完成后,prepareForSegue
已被隐式调用,手动触发将导致您偶然发现的错误。
希望我能提供帮助