Son zamanlarda benzer bir şey yapmak zorunda kaldım. Kullanıcının kullanıcı adını ve şifresini içeren her kullanıcı için bir CKRecord
oluşturmam gerekiyordu. Almayı kolaylaştırmak için kullanıcı adlarını NSUserDefaults
'a ekledim. Bir akım kontrol etmek için görünüm göründüğünde
//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)
}
})
}
, ben bu kodu çağırır: Burada
//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)
}
})
giriş kodudur: Burada
kaydolma kodudur kullanıcı:
if NSUserDefaults.standardUserDefaults().objectForKey("username") != nil {
username = NSUserDefaults.standardUserDefaults().objectForKey("username") as! String
self.performSegueWithIdentifier("account", sender: self)
}
variable username
, tüm sınıflar için küresel bir değişkendir. Küresel değişkenleri tercih etmiyorsanız, bunu değiştirmelisiniz.
Bu yardımcı olur umarım.
Geçerli kullanıcının kaydını [CKContainer fetchUserRecordIDWithCompletionHandler] kullanarak alabilirsiniz (https://developer.apple.com/library/ios/documentation/CloudKit/Reference/CKContainer_class/index.html#//apple_ref/occ/instm/CKContainer/discoverUserInfoWithUserRecordID: completionHandler :) – Quirk
Bir kayıt uygulaması yapmak için bunu nasıl kullanabilirim? Hangi kullanıcı adı, e-posta kimliği ve şifre ile yeni bir kullanıcı ekleyecek? – iHacks4iPhone
Kendi kayıt sıranızı oluşturabileceğinizi düşünmüyorum. Cloudkit Kullanıcı özelliklerini kullanabilmeniz için bir kullanıcı Apple Cloud'a kaydolmalıdır. – Quirk