jim*_*jim 3 login ios segue swift fbsdk
我已经安装了Facebook SDK,遵循了所有要求,因为我可以从用户的Facebook帐户中提取数据,但是我登录后无法执行segue.
我收到一条错误消息:
警告: Attempt to present <viewController1> on <FBSDKContainerViewController> whose view is not in the window hierarchy!
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if (FBSDKAccessToken.currentAccessToken() == nil) {
print("not logged in")
}
else {
print("logged in")
}
let loginButton = FBSDKLoginButton()
loginButton.readPermissions = ["public_profile", "email", "user_friends"]
loginButton.center = self.view.center
loginButton.delegate = self
self.view.addSubview(loginButton)
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
if ((error) != nil)
{
}
else if result.isCancelled {
}
else {
if result.grantedPermissions.contains("email")
{
// Do work
returnUserData()
addViewHierarchy()
// self.performSegueWithIdentifier("signUpFollowPage", sender: self)
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?谢谢
小智 7
我同样的问题一直在努力(虽然我使用FBSDKLoginManager的logInWithReadPermissions).
虽然问题似乎didCompleteWithResult是在Safari Web视图被解除之前调用了回调(或您的委托调用),但我找不到一个好的解决方案.
我(可怕的)答案是推迟segue,给自己FBSDKContainerViewController时间解雇.在你的情况下:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), { () -> Void in
self.performSegueWithIdentifier("signUpFollowPage", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
有可能延迟更短的时间.
这让我觉得Facebook登录SDK有一个错误.如果我找时间,我可能会查看SDK源代码.幸运的是,我正在开发的应用程序直到新的一年才会发布,所以我希望无论如何都可以在以后的版本中修复该问题.