Swift pushViewController 导致应用程序崩溃
Posted
技术标签:
【中文标题】Swift pushViewController 导致应用程序崩溃【英文标题】:Swift pushViewController causing app crash 【发布时间】:2020-04-04 06:53:40 【问题描述】:我是这里的 swift 开发新手,试图将 ios 13 的演示样式更改为使用推送类型的样式。原始源代码使用故事板来设置视图控制器的演示样式,但有一部分是他们用
覆盖的 override func prepare(for segue: UIStoryboardSegue, sender: Any?)
我设法使用 pushViewController 进行转换,但应用程序在它之后立即崩溃,我可以知道这里有什么问题吗? 这是完整的功能
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let selectedIndex:Int? = menuTableView.indexPathForSelectedRow?.row
if (selectedIndex! == 0 || selectedIndex! == 1)
let submitViewController: SubmitViewController = segue.destination as! SubmitViewController
if (selectedIndex! == 0)
submitViewController.currency = Constant.CURRENCY_MYR
else
submitViewController.currency = Constant.CURRENCY_SGD
else if (selectedIndex! == MENU_ACCOUNT_STATISTIC_INDEX)
let target: SearchResultViewController = segue.destination as! SearchResultViewController
target.toolbarOption = SearchResultViewToolBarOption.TOOLBAR_SMS
target.resultContent = self.resultContent
self.navigationController!.pushViewController(target, animated: true)
这是我得到的错误日志
2020-04-04 14:50:24.227072+0800 vboss[38120:1974490] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <vboss.MenuViewController: 0x7fd906087e00>.'
【问题讨论】:
如果 segue 已经在进行中,则不能进行推送或任何其他类型的导航。如果你真的想为不同的单元格选择不同的呈现风格,你将不得不定义不同的 segue。 我如何仅针对这部分内容执行此操作?抱歉,因为我是新手 【参考方案1】:你可以这样试试:
var selectedIndex : Int = -1
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
self.selectedIndex = indexPath.row
if (selectedIndex == 0 || selectedIndex == 1)
self.performSegue(withIdentifier: "submitViewController", sender: nil)
else if (selectedIndex == MENU_ACCOUNT_STATISTIC_INDEX)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let target = storyboard.instantiateViewController(withIdentifier: "searchResultViewController") as! SearchResultViewController
target.resultContent = self.resultContent
navigationController?.pushViewController(target, animated: true)
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if let submitViewController: ViewController = segue.destination as! SubmitViewController
if (selectedIndex == 0)
submitViewController.currency = Constant.CURRENCY_MYR
else
submitViewController.currency = Constant.CURRENCY_SGD
【讨论】:
在我的代码中确实有 func tableView 但我不知道应该如何将其更改为覆盖 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) if (MENU_ACCOUNT_STATISTIC_INDEX == indexPath.row ) // 用于帐户统计 searchManager.performSearchAccountStatistic() 在我做了一些更改后,我收到了这个错误致命错误:在展开可选值时意外发现 nil:文件 /Users/desmondwkh/Downloads/vboss-final/tab88/SearchResultViewController.swift,第 76 行 2020 -04-04 20:28:12.720037+0800 vboss[39539:2111250] 致命错误:在展开可选值时意外发现 nil:文件 /Users/desmondwkh/Downloads/vboss-final/tab88/SearchResultViewController.swift,第 76 行 您是否在情节提要中识别了 SearchResultViewController。故事板 -> SearchResultViewController.swift -> 身份 -> 故事板 ID 是的,它的 SearchResultViewController。 “SearchResultViewController”和“searchResultViewController”是不同的东西【参考方案2】:问题解决了,实际上是因为这部分使用了为另一个 ViewController 设置的情节提要中的 segue。所以我所要做的就是为那个特定的 segue 更改故事板设置,它也解决了这部分问题。
【讨论】:
以上是关于Swift pushViewController 导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中测试 pushViewController
如何在uitableviewcell swift上使用pushviewcontroller [重复]
Swift pushViewController 导致应用程序崩溃