2017-09-26 3 views
3

오늘 iOS 11 빌드 Xcode 9 &으로 이전을 시작했습니다. 내 storybased 응용 프로그램에서iOS 11 : self.performSegue() not working

, 다음 코드 (단지 아이폰 OS 10.3, 10.0, 9.0 확인) 이전의 모든 아이폰 OS에서 잘

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

실행되지만

추가 아이폰 OS 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 
} 

출력 (아이폰 OS 11) :

> Logged In 
> starting segue showIntroSegue 

예상 결과 : 새로운 컨트롤러는

을 밀어 실제 결과 아이폰 OS 11 : 아무것도 전혀

어떤 아이디어

는 이유가 무엇인지 어떻게됩니까?

성공적인 로그인 후 handleSuccessfulLogin() 함수가 호출되어 AWSCognito/AWSFacebookSignInProvider, 페이스 북 로그인으로 호출됩니다. iOS에는 새로운 팝업 continue with facebook이 있는데 그 이유는 의심 스럽지만 확인할 방법이 없습니다 .. 두 번째 호출에서이 팝업은 나타나지 않습니다 (페이스 북은 이미 승인 된 상태 임). 그러면 segue가 올바르게 트리거됩니다.

참고,이 스 니펫도 동일한 결과를 시도했습니다. 토론에 따르면

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

스토리 보드에서 섹슈를 제거하고 다시 추가하십시오. –

+0

@RashwanL 변경 슬프게 –

+0

segue 식별자가 예상대로 평가됩니까? –

답변

1

완전히 다른 장소에 솔루션이 있다는 것을 발견했습니다 (너무 자주). 이유는 현재의 스토리 보드를 대체하고있는 applicationDidBecomeActive에 로직이 있습니다 (나쁜 접근!). FB 키트의 추가 팝업이 컨테이너 뷰 컨트롤러의 레크리에이션으로 이어졌습니다. 따라서 나는 segue를 수행하는 호출 중에 self.navigationController == nil을 가졌습니다.

+0

: - 내 앱에서도 유사한 문제가 발생합니다 .PushNavigation이 iOS11에서 작동하지 않습니다. applicationDidBecomeActive에 논리가있는 경우 그렇다면 왜 iOS 10에서 정상적으로 작동합니까 ?? – Developer

+0

Facebook 로그인을 사용할 때 iOS 11 만 추가 경고를 추가하기 때문에 @ 개발자가 있습니다. 이 경고는 추가 'appliationDidBecomeActive'를 트리거하므로 2 개의 viewcontrollers로 끝납니다. –

0

, viewDidLoad이 SEGUE을 수행 전화를 배치 부적절하지만 X9에 이전 노력 해왔다로보기, 특별한 경우를 표시하기 전에 SEGUE를 실행하고자하는 사용자의 경우 많이있다, segue는 네비게이션 컨트롤러에 뷰 컨트롤러가 있거나로드 된 뷰를 표시 할 때 메인 스레드에 이미 있어야하는 메인 (viewDidLoad)으로 디스패치 할 때 트리거되는 것처럼 보입니다.

이것은 문서화되지 않은 기능 이라기보다는 버그라고 생각합니다.

+0

viewWillAppear 또는 viewDidAppear에서 수행해야하는 응용 프로그램 및 클래스 상태를 고려할 때 viewWillAppear 및 viewDidAppear가 매번 호출되는 segue를 방지하기 위해 viewWillAppear 및 viewDidAppear가 호출되므로 클래스 범위 상태를 평가해야하므로이를 고려하여 차례로 해당 개념을 가져옵니다. 안전 기능이 아닌 버그입니다. – 51N4