Swift segue - 不鼓励在分离的视图控制器上显示视图控制器

时间:2015-02-25 10:55:13

标签: ios swift segue

我想打开“选择城市”控制器,当selectedCityId为0(未定义)时 - 选择一个城市。在viewDidLoad()的根视图控制器(MainVC)中:

let selectedCityId = NSUserDefaults.standardUserDefaults().integerForKey("selectedCityId")

    if(selectedCityId == 0){
        self.performSegueWithIdentifier("startupSegue", sender: self)
    } else {
        ....
    }

所以startupSegue以模态方式打开settingsViewController(SettingsVC)!两者 - MainVC和SettingsVC都嵌入了导航视图控制器。

有2个警告:

  

在分离的视图控制器上呈现视图控制器是   气馁“myapp.MainVC:0x7fee8871e670”。

     

对开始/结束外观转换的不平衡调用   “UINavigationController:0x7fee8872c950”。

感谢您的回答。

2 个答案:

答案 0 :(得分:5)

我有同样的警告并通过将代码移动到-viewDidAppear来修复它。您应该注意的一件事是-viewDidLoad只被调用一次,而如果页面变得可见,则可以多次调用-viewDidAppear,因此您需要添加其他机制以再次跳过执行segue。

答案 1 :(得分:2)

将代码移动到-viewDidAppear是一个好主意但我也建议从主线程执行你的seque调用:

dispatch_async(dispatch_get_main_queue(), { () -> Void in
  self.performSegueWithIdentifier("startupSegue", sender: self)
})

Swift 3

DispatchQueue.main.async
  {
    self.performSegue(withIdentifier: "startupSegue", sender: self)
}