【发布时间】:2020-01-22 00:43:23
【问题描述】:
所以我有一个 ViewController 在调用 didSelectRowAt 时导航到另一个。我导航到新的视图控制器:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let accountInsightsViewController:AccountInsightsViewController = AccountInsightsViewController(nibName: "AccountInsightsViewController", bundle: nil)
accountInsightsViewController.accountDetailsObjectFromSourceController = self.accountDetailsObjectFromSourceController
accountInsightsViewController.accountDetailsObjectFromSourceController["accountId"] = self.accountDetailsObjectFromSourceController["accountId"]
if let navigator = navigationController {
navigator.pushViewController(accountInsightsViewController, animated: true)
}
}
然而,在这个新的视图控制器的viewDidLoad() 函数中,属性accountDetailsObjectFromSourceController 再次变成了一个空字典。在调试的时候,我可以清楚的看到,当我把这个属性字典设置为相同结构的字典时,恰好将字典的值正确地设置为具有3个键/值对的字典。但是,当 navigationController 推送这个 VC 时,它会崩溃,因为这个字典在新 VC 的 viewDidLoad() 内有 0 个键/值对
有人能告诉我为什么要设置这个值,但是当它导航到这个 VC 时,字典是空的吗?视图控制器以自己的 XIB 文件和 VC Swift 文件的形式出现。显然我在做正确的事情,它命中了viewDidLoad(),但为什么它不采用我在pushViewController 之前设置的值?
【问题讨论】:
-
也许 - 错误地 - 您还配置了从单元格到洞察视图控制器的 segue,然后它也会被推送到导航堆栈上,从而导致问题。请检查 segues 或检查是否真的只有一个见解视图控制器存在(这是您在
didSelectRowAt中创建的那个。 -
没有转场。我的代码清楚地表明它正在由导航控制器导航
标签: ios swift dictionary navigation