非常奇怪 Xcode 项目错误?
very weird Xcode project bug?
我正在尝试将一些 JSSAlertView
集成到我的 ViewController 之一中,但由于某些奇怪的原因,当我 运行 我的项目时,警报视图不显示.因此,为了确保编码没有任何错误,我创建了一个精确的伪项目来复制我原始项目的 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
任何与 UI 相关的事情都需要在主线程上完成,并且您正在后台线程 上调用 Parse 函数 (通过 requestPasswordResetForEmailInBackground
).
所以要让您的提醒出现在主线程上,:
@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())
”行了吗?
我正在尝试将一些 JSSAlertView
集成到我的 ViewController 之一中,但由于某些奇怪的原因,当我 运行 我的项目时,警报视图不显示.因此,为了确保编码没有任何错误,我创建了一个精确的伪项目来复制我原始项目的 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
任何与 UI 相关的事情都需要在主线程上完成,并且您正在后台线程 上调用 Parse 函数 (通过 requestPasswordResetForEmailInBackground
).
所以要让您的提醒出现在主线程上,
@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())
”行了吗?