【发布时间】:2018-03-08 04:56:54
【问题描述】:
我今天开始迁移到 Xcode 9 和 iOS 11 版本。
在我的基于故事的应用中,以下代码:
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 成功登录后调用,Facebook 登录。在 iOS 上有一个新的弹出窗口 continue with facebook 我怀疑是这个原因,但我无法验证它。在第二次调用时,这个弹出窗口没有出现(因为 facebook 已经被授权),然后 segue 触发正确。
注意,我也试过这个sn-p,结果一样。
OperationQueue.main.addOperation {
[weak self] in
self?.performSegue(withIdentifier: Const.UI.Segue.showIntro, sender: self)
}
【问题讨论】:
-
从情节提要中删除 segue 并重新添加。
-
@RashwanL 遗憾的是没有变化
-
该 segue 标识符的评估结果是否符合您的预期?
-
@JackDaw 添加了一些额外的代码。是的,const 评估为正确记录
prepareForSegue的“showIntroSegue” - 另请注意,在除 11 之外的所有其他 iOS 上,它都可以正常工作。设备和模拟器上存在问题。 -
我会在目标 VC init、viewDidLoad 等中放一些日志。
标签: ios swift swift3 ios11 xcode9