TWTRShareEmailViewController

TWTRShareEmailViewController

我在应用程序的注册过程中使用Twitter登录。我正在索要用户的电子邮件。一旦获得它,我想展示一个UIAlertController。

这是我的代码:

func askForTWMail(){
    if (Twitter.sharedInstance().session() != nil) {
        let shareMailVC=TWTRShareEmailViewController(completion: {(mail:String!, error:NSError!) in
            if (mail != nil) {
                print("GOT MAIL: \(mail)")
                self.gotMail()
            }else{
                print("MAIL VC ERROR: \(error)")
            }
        })
        println("PRESENT MAIL VC")
        self.presentViewController(shareMailVC, animated: true, completion: nil)
    }else{
        println("User not logged in")
    }
}

func gotMail(){
    var alertController=UIAlertController(title: "Some title", message: "Some message", preferredStyle: UIAlertControllerStyle.Alert)
    var okAction=UIAlertAction(title:"Yes", style: UIAlertActionStyle.Default) {
    UIAlertAction in
    //some action
    }
    var cancelAction=UIAlertAction(title:"No", style: UIAlertActionStyle.Cancel){
    UIAlertAction in
    //some action
    }
    alertController.addAction(okAction)
    alertController.addAction(cancelAction)
    self.presentViewController(alertController, animated: true, completion: nil)
}

但是我得到了这个错误(我想是因为TWTRShareEmailViewController没有被关闭):



我应该怎么写这个的任何想法吗?我怎么知道什么时候解散了TWTRShareEmailViewController以继续注册过程并能够显示我的UIAlertController?我不知道与TWTRShareEmailViewController相关的委托(delegate)方法。

任何帮助表示赞赏。谢谢。

最佳答案

找到了解决方案here。我可能做错了,但如果不是,那可能是Apple的错误。解决方法是延迟UIAlertController的显示:

dispatch_async(dispatch_get_main_queue(), ^{
    self.presentViewController(alertController, animated: true, completion: nil)
})

编辑:我发现了另一个解决方法(我不再使用我在这里提供的解决方案)。我必须更改此设置,因为Twitter登录也破坏了我在VC之间的转换。

现在,我调用一个特定的UIViewController(我将其称为TWLoginVC之类的名称),在其中执行所有Twitter登录和其他操作。 View 只是黑色的,因此用户看不到该过程实际上是在另一个VC中完成的(他只需要选择要登录的Twitter用户)。我想您也可以设置一个清晰的背景,使其更加隐蔽。

当我调用此 View Controller 并将其关闭时,过渡不会应用到它,并且我没有任何其他问题。

编辑
Swift更新:
DispatchQueue.main.async{
     self.present(alertController, animated: true, completion: nil)
}

09-05 01:52