我正在使用Swift和parse.com框架开发iOS-App,并且在注册新用户时遇到了很大的问题。
虽然新用户已注册,但第一次点击时未调用“signUpInBackgroundWithBlock”块。当我再次点击该按钮时,该块最终被调用,我收到一个错误,即用户名已经注册。
var newUser = PFUser()
newUser.username = registerView.nicknameTextField.text.trim()
newUser.email = registerView.emailTextField.text
newUser.password = registerView.passwordTextField.text
newUser.signUpInBackgroundWithBlock {
(succeeded: Bool, error: NSError!) -> Void in
self.registerCompletionBlock(succeeded, error: error)
}
有人遇到同样的问题,并且知道这种奇怪行为的解决方案吗?
谢谢!
编辑:
完成块应调用“registerCompletionBlock()”函数:
func registerCompletionBlock(succeeded: Bool, error: NSError!) {
if error == nil {
let subscriptionStoryboard = UIStoryboard(name: "Subscription", bundle: nil)
let viewcontroller: UIViewController = subscriptionStoryboard.instantiateInitialViewController() as UIViewController
self.presentViewController(viewcontroller, animated: true, completion: nil)
} else {
if let errorString = error.userInfo?["error"] as? NSString {
println(errorString)
if error.userInfo?["code"] as Float == 202{
let alert = UIAlertView(title: "vergeben", message: "name vergeben", delegate: nil, cancelButtonTitle: "abbrechen")
alert.show()
}
}
}
}
答案 0 :(得分:1)
我尝试过之前发布的解决方案(取消PFUser.enableAutomaticUser()
),问题仍然存在。
如果其他人仍在寻找此问题的解决方案,请尝试将if error == nil
更改为if succeeded == true
块中的signUpInBackground
。这对我有用,所有功能都在后端运行。
答案 1 :(得分:0)
它第一次调用,但它需要一点时间来调用它..因为它在服务器上以异步方式发送数据。异步永远不会阻塞主线程..
因为: -
答案 2 :(得分:0)
因为您将方法调用为异步,所以需要一些时间来执行它,并且您的主线程不会等待方法完成。因此,如果您想在注册后显示消息或执行segue,请将其放入完成块中:
newUser.signUpInBackgroundWithBlock {
(succeeded: Bool!, error: NSError!) -> Void in
if error == nil {
// Perform a segue, show a message or whatever you want
} else {
let errorString = error.userInfo["error"] as NSString
// Show the errorString somewhere and let the user try again.
}
}
此外,如果您不想异步操作,可以调用signUp()
方法(不使用inBackgroundWithBlock
。这样,应用程序会等待注册完成,直到它继续。
答案 3 :(得分:0)