Swift Parse 在注册时不显示错误消息

标签 swift parse-platform message

我创建了一个用户类,其中包含一个 Parse PFUser() 对象和一个 error_messages 字符串。

用户类中有一个注册函数,它将使用 PFUser 对象并执行signUpInBackgroundWithBlock()。

在该函数中,它应该设置一个标志,通知主视图 Controller 发生错误(如果发生错误),并使用从 PFUser 传回的错误消息在 User 对象中设置 error_message 字符串。

但是,一旦发生错误,函数就不会完成执行,例如,如果输入了错误的电子邮件格式,例如 aaaa.com 而不是 aaa@a.com,函数将不会返回并设置标志从 PFUser 传递的错误消息仅显示在控制台窗口中。

我花了几天时间尝试一切可以想象的方法来在用户类中设置标志和错误消息,但我无法弄清楚。

这是类代码

class User {
var user_db_obj = PFUser()
var error_message = "Please try again later"
//var user_name: String
//var pass_word: String


//Constructor for User object
init(user: String, pass: String){
    user_db_obj.username = user
    user_db_obj.email = user
    user_db_obj.password = pass
}


//This function signs a user up to the database
func signUp() -> Bool {
    var error_in_sign_up: Bool = true

    user_db_obj.signUpInBackgroundWithBlock {(succeeded: Bool?, error: NSError?) -> Void in

        //stop spinner and allow interaction events from user
        activityIndicator.stopAnimating()
        UIApplication.sharedApplication().endIgnoringInteractionEvents()

        if error == nil{
            error_in_sign_up = false
            //sign up successful
        }
        else{
            let error_string = error!.userInfo["error"] as? String
            self.error_message = error_string!
        }
    }
    if error_in_sign_up == true{
        return false
    }
    else{
        return true
    }
}

这是从 User 类调用注册函数的 View Controller 代码。

    //Action for signup button
@available(iOS 8.0, *)
@IBAction func signup_btn(sender: AnyObject) {

    if email_tf.text!.isEmpty || pass_tf.text!.isEmpty {
        //if email or password field blank display error message
        displayAlert("Error in form", msg: "Please enter a username and password")
    }

    else{ //perform actual signup/login if email and password supplied

        //Display spinner while database interaction occuring and ignore user interactions as well
        activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
        activityIndicator.center = self.view.center
        activityIndicator.hidesWhenStopped = true
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        view.addSubview(activityIndicator)
        activityIndicator.startAnimating()
        UIApplication.sharedApplication().beginIgnoringInteractionEvents()

        let theUser = User(user: email_tf.text!, pass: pass_tf.text!)

        //sign up
        if signup_mode == true{
            if theUser.signUp() == false{
                displayAlert("Failed SignUp", msg: theUser.error_message)
            }
        }

        //login
        else{
            if theUser.login() == false{
                displayAlert("Failed Login", msg: theUser.error_message)
            }
        }
    }

}

最佳答案

问题是函数 signUpInBackgroundWithBlock 不在主线程上运行,如果你想保留这个函数,你必须注册通知,然后在其他 viewController 中监听它是否成功...... something like this

关于Swift Parse 在注册时不显示错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815386/

相关文章:

ios - 字符串编码 - Swift

ios - 从 Parse Server Query 检索数据不起作用?

ios - 使用 Parse 构建数据库

python - 无法在 wxPython 中正确使用 wx.NotificationMessage

size - IMAP 命令获取邮件大小

ios - SpriteKit - 对象内部的播放器

ios - 在 UICollectionView(或 UITableView)swift 中循环数据

ios - 带有大标题的应用程序在滚动时抖动

parse-platform - 更新 Cloud Code SDK 时权限被拒绝

android - 如何在 android 上获取失败的 shell 命令的错误消息