我正在尝试在我的一个ViewControllers中集成一些JSSAlertView
,但由于一些奇怪的原因,当我运行我的项目时,警报视图不会显示。因此,为了确保编码没有任何错误,我创建了一个精确的伪项目来复制我原始项目的ViewController,直到它在故事板上的UI元素。我将原始项目中的确切代码复制到新的ViewController上,运行它,一切正常。我坚持搞清楚,为什么它会在我原来的项目上工作?
这是我使用的逻辑:
@IBAction func resetPass(sender: AnyObject) {
actview.hidden = false
actview.startAnimating()
PFUser.requestPasswordResetForEmailInBackground(emailReset.text) {
(success:Bool, error:NSError?) ->Void in
if(success){
let yesMessage = "Email was sent to you at \(self.emailReset.text)"
dispatch_async(dispatch_get_main_queue()) {
self.actview.stopAnimating()
JSSAlertView().success(self, title:"Great Success", text:yesMessage)
}
}
if(error != nil){
let errorMessage:String = error!.userInfo!["error"] as! String
dispatch_async(dispatch_get_main_queue()) {
self.actview.stopAnimating()
JSSAlertView().warning(self, title:"Woah There", text:errorMessage)
}
}
}
}
我在JSSAlertView
之一的调用中设置了一个断点,在我的控制台中扩展了元素并得到了这个:
这是内存管理错误以及它们不可见的原因吗?我该如何解决这个问题?
这是Git,如果你想查看它,它真棒:https://github.com/stakes/JSSAlertView
答案 0 :(得分:0)
需要在主线程上完成UI的任何操作,并且您在后台线程上调用Parse函数 (通过requestPasswordResetForEmailInBackground
)。
因此,要让您的提醒出现在主要帖子you need to add a little GCD magic:
上@IBAction func resetPass(sender: AnyObject) {
actview.hidden = false
actview.startAnimating()
PFUser.requestPasswordResetForEmailInBackground(emailReset.text) {
(success:Bool, error:NSError?) ->Void in
if(success){
self.actview.stopAnimating()
let yesMessage = "Email was sent to you at \(self.emailReset.text)"
dispatch_async(dispatch_get_main_queue()) {
self.successMessage(yesMessage)
}
};
if(error != nil){
self.actview.stopAnimating()
let errorMessage:String = error!.userInfo!["error"] as! String
dispatch_async(dispatch_get_main_queue()) {
self.failureMessage(errorMessage)
}
}
}
}
请参阅我添加的" dispatch_async(dispatch_get_main_queue())
"行?