PFFacebookUtils.logInInBackground 不执行 segue
Posted
技术标签:
【中文标题】PFFacebookUtils.logInInBackground 不执行 segue【英文标题】:PFFacebookUtils.logInInBackground do not perform segue 【发布时间】:2018-03-22 16:27:22 【问题描述】:嘿,下面的代码不知何故不适用于 segue。它返回:
警告:尝试展示不在窗口层次结构中的视图!
代码在 IBAction 按钮中运行。然后我在没有 PFFacebookUtils 代码的情况下执行 segue,它工作正常。从那我猜不能从 PFFacebookUtils 调用 segue,因为它在后台以某种方式工作。
代码:
PFFacebookUtils.logInInBackground(withReadPermissions: permissions)
(user: PFUser?, error: Error?) -> Void in
if let user = user
if user.isNew
print("User signed up and logged in through Facebook!")
self.performSegue(withIdentifier: "segueSignUpWindow", sender: nil)
else
print("User logged in through Facebook!")
self.performSegue(withIdentifier: "segueSignUpWindow", sender: self)
else
print("Uh oh. The user cancelled the Facebook login.")
self.loginCancelledLabel.alpha = 1
我尝试插入其他代码,例如:
DispatchQueue.main.async
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SignUp")
self.show(vc, sender: self)
print("Hello")
或带功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if (segue.identifier == "segueSignUpWindow")
DispatchQueue.main.async
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SignUp")
self.show(vc, sender: self)
print("Hello")
没有任何作用。有没有人有一个可行的解决方案?我的目标是在登录或登录后转到另一个故事板。
我查看了 *** 中的大多数线程。没有找到有效的解决方案。
【问题讨论】:
【参考方案1】:我能得到的最接近的:
使用初始化值触发 var segueLogin : Bool = false。
当 PFFacebookUtils 获得 segue 所需的值时,将触发器更改为 true:
PFFacebookUtils.logInInBackground(withReadPermissions: permissions)
(user: PFUser?, error: Error?) -> Void in
if let user = user
if user.isNew
print("User signed up and logged in through Facebook!")
self.segueLogin = true
else
print("User logged in through Facebook!")
self.segueLogin = true
else
print("Uh oh. The user cancelled the Facebook login.")
self.loginCancelledLabel.alpha = 1
然后将代码添加到 viewDidAppear 类。意识到它每次 PFFacebookUtils 完成时都会启动。所以它会检查返回值是否为真,并在 PFFacebookUtils 会话成功后执行 segue:
override func viewDidAppear(_ animated: Bool)
if segueLogin == true
self.performSegue(withIdentifier: "segueSingup", sender: self)
【讨论】:
以上是关于PFFacebookUtils.logInInBackground 不执行 segue的主要内容,如果未能解决你的问题,请参考以下文章