首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PFFacebookUtils.logInInBackground不执行segue

PFFacebookUtils.logInInBackground不执行segue
EN

Stack Overflow用户
提问于 2018-03-22 16:27:22
回答 1查看 104关注 0票数 0

嗨,下面的代码不知何故不适用于segue。它返回:

警告:尝试显示其视图不在窗口层次结构中!

代码在IBAction按钮中运行。然后,我在没有PFFacebookUtils代码的情况下执行segue,它工作得很好。由此,我猜不能从PFFacebookUtils调用segue,因为它在后台某种程度上起作用。

代码:

代码语言:javascript
复制
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
            }
        }

我尝试插入其他代码,例如:

代码语言:javascript
复制
DispatchQueue.main.async {
                let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                let vc = storyboard.instantiateViewController(withIdentifier: "SignUp")
                self.show(vc, sender: self)
                print("Hello")

或具有职能:

代码语言:javascript
复制
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")
            }
        }

毫无办法。有人有可行的解决方案吗?我的目标是使另一个故事板在登录或登录后继续。

我已经在堆栈溢出中查找了大多数线程。没有找到有效的解决办法。

EN

回答 1

Stack Overflow用户

发布于 2018-03-22 17:21:38

我能得到的最接近的:

生成触发器var segueLogin : Bool = false (初始化值)。

当PFFacebookUtils获得segue所需的值时,将触发器更改为true:

代码语言:javascript
复制
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:

代码语言:javascript
复制
override func viewDidAppear(_ animated: Bool) {
        if segueLogin == true {
            self.performSegue(withIdentifier: "segueSingup", sender: self)
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49433779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档