Я пытаюсь использовать CloudKit
в моем приложении IOS, но когда я пытаюсь создать новую запись для User
типа записи (типа записи называется Users
), я получаю эту ошибку:СОЗДАТЬ операция не разрешена
<CKError 0x7fb80947ffb0: "Permission Failure" (10/2007);
server message = "CREATE operation not permitted";
uuid = 8C4C7B60-E3F4-42FC-9551-D3A76A6FF9D6;
container ID = "iCloud.com.jojodmo.Blix">
Чтобы создать новую запись, я использую этот код в viewDidLoad()
:
UserCKManager.create(
CloudKitUser(
email: "[email protected]", password: "password", salt: "1AF4E759B20FEC32",
username: "jojodmo", posts: [], biography: "This is my bio",
firstName: "John", lastName: "Doe", flags: [],
profilePicture: UIImage(), downVotesGiven: 1, downVotesRecieved: 2,
upVotesGiven: 3, upVotesRecieved: 4, pictureProvided: false), callback: nil)
Что создает новый CloudKitUser
:
init(email: String, password: String, salt: String, username: String, posts: [String], biography: String, firstName: String, lastName: String, flags: [String], profilePicture: UIImage, downVotesGiven: Int, downVotesRecieved: Int, upVotesGiven: Int, upVotesRecieved: Int, pictureProvided: Bool){
self.ready = false
record = CKRecord(recordType: "Users")
self.email = email
self.password = password
self.salt = salt
self.username = username
self.posts = posts
self.biography = biography
self.firstName = firstName
self.lastName = lastName
self.flags = flags
self.profilePicture = profilePicture
self.downVotesGiven = downVotesGiven
self.downVotesRecieved = downVotesRecieved
self.upVotesGiven = upVotesGiven
self.upVotesRecieved = upVotesRecieved
self.pictureProvided = pictureProvided
self.ready = true
}
А затем пытается создать запись с ним:
class func create(user: User, callback: ((success: Bool, user: User?) ->())?){
let ckUser = CloudKitUser(user: user)
//I've also tried using CKContainer.defaultContainer().privateCloudDatabase, and I get the same error
CKContainer.defaultContainer().publicCloudDatabase.saveRecord(ckUser.record){(record, error) in
if(error != nil){
println("An error occurred: \(error)")
callback?(success: false, user: nil)
}
else{
println("Record saved successfully")
callback?(success: true, user: ckUser)
}
}
}
Я знаю, что это не проблема с подключением к базе данных, потому что я уже получил ошибку о том, что не было никакого контейнера с ID, который я дал, который я исправил.
Я пытаюсь запустить это на iOS
имитатора (я подписал ICloud на него)
Это похоже на проблему с разрешением. Вы можете напрямую обращаться к базе данных с одним и тем же пользователем? Если да, можете ли вы создать свою запись с прямым доступом? Я считаю, что ответ для первого - это да, а второй - нет. Вы должны предоставить пользователю базы данных разрешение на создание. –
@LajosArpad Первый ответ - да, но второй ответ тоже нет, как я могу дать пользователю создать разрешение на создание базы данных? Я чувствую, что я бы попробовал это, если бы знал, как – Jojodmo