2016-10-20 8 views
0

В моем приложении у меня есть вход в Facebook на моем первом контроллере представления, который перенаправляется на мой следующий контроллер представления после успешного входа в систему, у которого есть опция входа в LinkedIn.Окно входа не открывается в следующем представлении контроллера Swift

Однако после нажатия кнопки входа в систему LinkedIn я получаю эту ошибку.

2016-10-17 23:00:42.588 Frieyo[86134:1636422] -canOpenURL: failed for URL: "linkedin://" - error: "The operation couldn’t be completed. (OSStatus error -10814.)" 
2016-10-17 23:00:42.593 Frieyo[86134:1636422] Warning: Attempt to present <UINavigationController: 0x7f9fa409ba00> on <Frieyo.TutorialViewController: 0x7f9fa2c04430> whose view is not in the window hierarchy! 

Я знаю, что это не проблема с открытием URL LinkedIn, потому что мой App Делегат правильно обработки тех URL, и , когда я установил вид контроллера LinkedIn, как мой первоначальный вид контроллера на вход работает!

По-видимому, эти ответы: iOS: Warning "attempt to present ViewController whose view is not in the window hierarchy" и whose view is not in the window hierarchy указывают, что я должен поместить этот метод в свой метод viewDidAppear; однако это не имеет значения, потому что после успешного входа я перенаправляюсь на другое представление.

Проблема (предположим) лежит внутри стека представления. Вот как я перехожу от первого контроллера представления к LinkedIn VC.

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 
    let nextViewController = storyBoard.instantiateViewController(withIdentifier: "VerifyLinkedInViewController") as! VerifyLinkedInViewController 
    self.present(nextViewController, animated:true, completion:nil) 

Как именно я переписывать, чтобы избежать - «чей вид не в иерархии окон» ?

+0

Вы пробовали использовать letViewController = storyBoard.instantiateViewController (withIdentifier: "VerifyLinkedInViewController") как! UIViewController ....? –

+0

Просто попробовал. Не повезло:/Почему вы это предложили? –

+0

иерархия окна в том смысле, что ваш следующий контроллер/представление не находится в очереди, чтобы загрузить на окно .., вы что-то пропустили в коде/раскадровке, попытайтесь отладить в проекте (это распространенная ошибка произойдет, когда мы попробуем вновь или migrate objc to swift). –

ответ

0

Я столкнулся с этой проблемой, проблема была в моем методе входа в facebook, в параметре «fromViewController».

Чтобы исправить это, мне пришлось ссылаться на контроллер просмотра, что я сделал вызов метода, а не создавал новый экземпляр.

EDIT - пример кода (это та, которую он сейчас работает для меня):

func performFacebookSignIn(viewController: UIViewController) { 

    let facebookReadPermissions = ["public_profile", "email"] 
    let loginManager = FBSDKLoginManager() 

    loginManager.logInWithReadPermissions(facebookReadPermissions, fromViewController: viewController, handler: { (result: FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in 
     if error != nil { 
      print(error) 
     } else if result.isCancelled { 
      print("User cancelled login.") 
     } else { 
      print("Facebook sign in!") 
     } 
    }) 

Перед тем, что вместо того, чтобы использовать параметр «ViewController» из другой ViewController где я назвал метод, я был создавая новый контроллер View в параметре «fromViewController» (я делал: MyViewController() как UIViewController), и это вызывало мне эту ошибку «иерархии окон».

Надеюсь, вам это поможет.

+0

Сэмюэл, я не уверен, что вы имеете в виду. Можете ли вы объяснить с помощью кода? –

+0

Также я представляю свой следующий монитор управления, поэтому я не уверен, что я делаю неправильно? –

+0

Я отредактировал свой ответ, посмотри Рохит. –