iOS 11:self.performSegue()不工作
我开始迁移到Xcode 9 &今天iOS 11构建。iOS 11:self.performSegue()不工作
在我storybased的应用程序,下面的代码:
self.performSegue(withIdentifier: Const.UI.Segue.showIntro, sender: self)
运行在所有的iOS以前(只是与iOS 10.3,10.0,9.0验证)罚款,但在iOS的11不运行
附加代码:
private func handleSuccessfulLogin() {
self.log.info("Logged In")
DispatchQueue.main.async(){
self.performSegue(withIdentifier: Const.UI.Segue.showIntro, sender: self)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("starting segue " + segue.identifier!)
}
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
print("should perform segue")
return true
}
打印输出(iOS的11):
> Logged In
> starting segue showIntroSegue
预期结果:新控制器推
实际结果iOS的11:什么都没有发生
任何想法的原因可能是什么?
功能handleSuccessfulLogin()
是在用登录名AWSCognito/AWSFacebookSignInProvider
成功登录后调用的。在iOS上有一个新的弹出continue with facebook
,我怀疑是原因,但没有办法验证它..在第二次调用这个弹出窗口不会出现(因为facebook已经被授权),然后segue正确触发。
请注意,我也试过这段代码,结果相同。
OperationQueue.main.addOperation {
[weak self] in
self?.performSegue(withIdentifier: Const.UI.Segue.showIntro, sender: self)
}
我发现解决方案是在一个完全不同的地方(经常这样)。 原因是我在applicationDidBecomeActive
中有一个逻辑取代了当前的故事板(坏方法!) - FB Kit中的额外弹出窗口导致了我的容器视图控制器的重新创建。因此我在呼叫期间有self.navigationController == nil
执行segue。
: - 我的应用也面临类似问题.PushNavigation在iOS11中无法使用。如果你在applicationDidBecomeActive中有一些逻辑。那么为什么它在iOS 10中工作正常? – Developer
@开发者,因为只有iOS 11在使用Facebook登录时添加了额外的警报。这个提醒引发了一个额外的“appidationDidBecomeActive”,所以我结束了2个视图控制器。 –
根据讨论,viewDidLoad
是不合适的地方打电话进行SEGUE,但也有很多的用户情况下,希望的观点,因为它一直在努力之前的X9
出现,特殊情况下才触发SEGUE,因为在视图控制器处于导航控制器中或调度到main(在viewDidLoad
)时,segue似乎会触发,当呈现加载的视图时,它应该已经在主线程中。
这我会考虑一个错误,而不是一个无证的功能。
考虑到减少需要在viewWillAppear或viewDidAppear中执行的应用程序和类的状态的概念,因为每次都会调用viewWillAppear和viewDidAppear,因此每次都会调用viewWillAppear和viewDidAppear以防止每次调用segue,这反过来又带来了它的概念是一个错误而不是安全功能。 – 51N4
从您的故事板中删除segue并重新添加。 –
@RashwanL不会悲伤 –
那个segue标识符是否会评估您所期望的? –