在Parse中,为了建立新用户,我使用了:
var user = PFUser()
user.username = "myUsername"
user.password = "myPassword"
user.email = "email@example.com"
CloudKit中用于创建新用户并将其用于登录的代码是什么?
答案 0 :(得分:3)
我最近不得不做类似的事情。我必须为每个包含用户用户名和密码的用户创建CKRecord
。我将其用户名添加到NSUserDefaults
,以便于检索。
以下是注册代码:
//Check if users exist
let query = CKQuery(recordType: "MyUsers", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
pubDB.performQuery(query, inZoneWithID: nil, completionHandler: { (records, error) in
//error code 11 is no objects found
if error == nil || error?.code == 11 {
var usernameExists = false
for record in records! {
if record.objectForKey("username") as? String == self.usernameField.text {
//other user with the same username exists - don't allow user to create account
usernameExists = true
}
}
if usernameExists == true {
//displayErrorAlert is a function in which I display an error alert to the user
displayErrorAlert("Username \(self.usernameField.text!) is taken. Please choose another one.", vc: self)
} else {
//user can sign up
let record = CKRecord(recordType: "MyUsers")
record.setObject(self.usernameField.text!, forKey: "username")
record.setObject(self.passwordField.text!, forKey: "password")
pubDB.saveRecord(record, completionHandler: { (record, error) in
if error == nil {
NSOperationQueue.mainQueue().addOperationWithBlock {
NSUserDefaults.standardUserDefaults().setObject(self.usernameField.text!, forKey: "username")
username = self.usernameField.text!
self.performSegueWithIdentifier("account", sender: self)
}
} else {
print(error)
}
})
}
} else {
print(error)
}
})
以下是登录的代码:
//query users to find current user
let query = CKQuery(recordType: "MyUsers", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
pubDB.performQuery(query, inZoneWithID: nil, completionHandler: { (records, error) in
//we do not need to check for error code 11 because a user should exist
if error == nil {
var userExists = false
for record in records! {
if record.objectForKey("username") as? String == self.usernameField.text {
if record.objectForKey("password") as? String == self.passwordField.text {
NSOperationQueue.mainQueue().addOperationWithBlock {
userExists = true
NSUserDefaults.standardUserDefaults().setObject(self.usernameField.text!, forKey: "username")
username = self.usernameField.text!
self.performSegueWithIdentifier("account", sender: self)
}
} else {
//user with the username exists, but the password does not match
displayErrorAlert("Your password is incorrect", vc: self)
}
}
}
if userExists == false {
//user with that username does not exist
displayErrorAlert("Your username is incorrect", vc: self)
}
} else {
print(error)
}
})
}
当视图出现时,我会调用此代码来检查当前用户:
if NSUserDefaults.standardUserDefaults().objectForKey("username") != nil {
username = NSUserDefaults.standardUserDefaults().objectForKey("username") as! String
self.performSegueWithIdentifier("account", sender: self)
}
variable username
是所有类的全局变量。如果您不喜欢使用全局变量,则应更改它。
希望这会有所帮助。