Swift尝试呈现其视图不在窗口层次结构中的UIAlertController(在TWTRShareEmailViewController之后呈现)
我在我的应用程序的注册过程中使用Twitterlogin。 我要求用户的电子邮件。 一旦我得到它,我想提出一个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不被解雇):
警告:尝试在其视图不在窗口层次结构中的xViewController上呈现UIALertController!
任何想法,我应该如何写这个? 我怎么知道什么时候TWTRShareEmailViewController
被解散,继续注册过程,并能够呈现我的UIAlertController
? 我不知道与TWTRShareEmailViewController
相关的委托方法。
任何帮助表示赞赏。 谢谢。
在这里find了解决办法 我可能做错了,但如果不是,它可能是一个苹果的错误。 解决方法是延迟UIAlertController
:
dispatch_async(dispatch_get_main_queue(), ^{ self.presentViewController(alertController, animated: true, completion: nil) })
编辑 :我发现另一个解决方法(我不使用我放下这里的解决scheme了)。 我不得不改变这个,因为Twitter的login也打破了VC之间的转换。
我现在调用一个特定的UIViewController
(我称之为TWLoginVC
),在那里我做所有的Twitterlogin和其他东西。 视图是黑色的,所以用户看不到这个过程实际上是在另一个VC中完成的(他只需要拿起他想要login的Twitter用户)。 我想你也可以把一个清晰的背景变得更加隐形。
当我调用这个视图控制器并closures它时,转换不适用于它,并且我没有任何问题。
编辑更新Swift:
DispatchQueue.main.async{ self.present(alertController, animated: true, completion: nil) }
以下是基于Marie Dm的答案在Xcode 8上testing的Swift 3的更新答案。
DispatchQueue.main.sync { self.present(alertController, animated: true, completion: nil) }
如果DispatchQueue.main.sync
导致暗恋,请尝试DispatchQueue.main.async
。 “async”在从contactPicker()
返回的过程中适用于我的问题。
- 移动Safari / iPhone Mail.app HTMLdevise问题:防止自动链接和样式自动链接(date,地址等)
- 我们可以从iPhone的联系人列表中访问emailids吗?
- iOS – 将联系人添加到联系人?
- 如何使用Gmail api快速发送电子邮件
- 在SKPSMTPMessage中附加一个video
- 在Swift中用TWTRShareEmailViewController(Fabric Twitter SDK)请求用户Twitter邮件
- iOS MFMailComposeViewController和从联系人卡获取用户名
- iOS Facebook获取用户的电子邮件
- 我如何在Linux上构build一个Mac包? (BOM文件问题)