非常奇怪的Xcode项目错误?

时间:2015-08-12 02:58:18

标签: ios swift uiviewcontroller uialertview

我正在尝试在我的一个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之一的调用中设置了一个断点,在我的控制台中扩展了元素并得到了这个:

enter image description here

这是内存管理错误以及它们不可见的原因吗?我该如何解决这个问题?

这是Git,如果你想查看它,它真棒:https://github.com/stakes/JSSAlertView

1 个答案:

答案 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())"行?