2017-09-26 23 views
3

iOS 11のビルドをXcode 9 &に移行しました。私storybasedアプリでiOS 11:self.performSegue()が動作しない

、次のコード:(ちょうどiOSの10.3、10.0、9.0で確認)以前のすべてのiOSでの細かい

self.performSegue(withIdentifier: Const.UI.Segue.showIntro, sender: self) 

実行されますが、

追加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

実際の結果をプッシュ:すべての何も理由が何であるか

任意のアイデアを起こりませんか?

ファンクブックAWSCognito/AWSFacebookSignInProviderでログインできたら、handleSuccessfulLogin()という関数が呼び出されます。 iOS上ではcontinue with facebookという新しいポップアップがありますが、それは理由があると思われますが、それを検証する方法はありません.2番目のコールでは、このポップアップは表示されません(facebookはすでに承認されています)。

注:私はこのスニペットも同じ結果を試しました。協議によると

OperationQueue.main.addOperation { 
     [weak self] in 
     self?.performSegue(withIdentifier: Const.UI.Segue.showIntro, sender: self) 
    } 
+0

ストーリーボードからセグを削除してもう一度追加してください。 –

+0

@RashwanL変更なし悲しいことに –

+0

セグの識別子はあなたの期待通りに評価されますか? –

答えて

1

解決策が全く異なる場所にあることがわかりました。 理由は、現在のストーリーボードを置き換えていたapplicationDidBecomeActiveのロジックがありました(悪いアプローチです!)FBキットの追加のポップアップがコンテナビューコントローラの再作成につながりました。したがって、私はself.navigationController == nilを呼び出し中にsegueを実行しました。

+0

: - 私のアプリでも同様の問題に直面しています.PushNavigationはiOS11で動作していません。もしあなたがapplicationDidBecomeActiveにあるロジックを持っていたら。その後、なぜiOS 10で正常に動作していたのですか? – Developer

+0

Facebookのログインを使用している場合、iOS 11のみが追加の警告を追加するため、@開発者になります。この警告は追加の 'appliationDidBecomeActive'をトリガーしていたので、2つのViewControllerで終了しました。 –

0

viewDidLoadはセグエを行う呼び出すために配置することは不適切であるが、それはX9に以前働いていたとしてビューは、特殊なケースを表示される前にセグエをトリガしたいユーザー事例の多くがあり、ナビゲーションコントローラ内のビューコントローラを持つか、ロードされたビューを表示するときにメインスレッド上にあるメイン(viewDidLoad)にディスパッチするときに、セグがトリガしているように見えるからです。

これは文書化されていない機能ではなく、バグと考えています。

+0

viewWillAppearまたはviewDidAppearで実行する必要のあるアプリケーションやクラスの状態を考慮すると、viewWillAppearとviewDidAppearが呼び出されるたびにクラススコープの状態が評価される必要があります。毎回segueが呼び出されるのを防ぎ、安全機能ではなくバグです。 – 51N4

関連する問題