在我的应用程序中,我的第一个视图控制器中有一个Facebook登录,在成功登录后会重定向到我的下一个视图控制器,该登录具有LinkedIn登录选项。
但是,按下LinkedIn Login按钮后,我收到此错误。
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!
我知道打开LinkedIn网址不是问题,因为我的App Delegate正确处理这些网址而当我将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)
我如何重写以避免 - &#34;其视图不在窗口层次结构中!&#34; ?
答案 0 :(得分:0)
我刚遇到这个问题,问题出在我的facebook登录方法中,在“fromViewController”参数中。
为了解决这个问题,我必须引用View Controller来调用方法,而不是实例化一个新方法。
编辑 - 代码示例(这是它现在为我工作的那个):
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”参数,而是在“fromViewController”参数中实例化一个新的View Controller(我正在做:MyViewController()为UIViewController)它是让我这个“窗口层次结构”错误。
我希望它能以某种方式帮助你。