Cloudkit выдает ошибку при попытке сохранить запись
Я пытаюсь просто сохранить запись в частной базе данных пользователей, но когда я запускаю privateDB.saveRecord(), я получаю сообщение об ошибке
Not Authenticated" (9/1002); "CloudKit access was denied by user settings"; Retry after 3.0 seconds>.
Эта учетная запись может входить в панель инструментов cloudkit, поэтому она является разработчиком приложения. Какие другие проблемы могут вызвать это? Любая помощь будет очень признательна, я застрял на этом так долго.
Вот мой код:
//variable instantiation
container = CKContainer.defaultContainer()
println(container.containerIdentifier)
publicDB = container.publicCloudDatabase
privateDB = container.privateCloudDatabase
//save record code
let passRecord = CKRecord(recordType: "Password")
passRecord.setValue("testytestPow", forKey: "title")
passRecord.setValue("password02", forKey: "value")
privateDB.saveRecord(passRecord, completionHandler: { (record, error) -> Void in
if (error != nil) {
println(error)
} else {
NSLog("Saved in cloudkit")
self.fetchTodos()
}
})
6 ответов
Я обнаружил, что вообще не могу подключиться к CloudKit, пока не перейду на диск iCloud; в моем случае я смог сделать это в симуляторе. Также вы не можете войти в iCloud на симуляторе, если у вас настроена двухфакторная аутентификация.
Произошло то же самое, потому что я пытался добавить много записей из MutableArray. Мне пришлось делать рекурсивные вызовы saveRecord, чтобы исправить эту проблему.
MyObject *obj = [arrayOfObjects ObjectAtIndex:index];
[self addRecord];
а затем в методе addRecord
- (void) addRecord {
// if all objects added, exit recursive method
if(index == [arrayOfObjects count]) {
return;
}
MyObject *obj = [arrayOfObjects ObjectAtIndex:index];
[publicDatabase saveRecord:rec completionHander:^(CKRecord *myRec, NSError *error) {
if (!error) {
index++
[self addRecord];
}
}
Я получал эту ошибку, пытаясь загрузить список записей в базу данных одновременно. Когда я сделал это по одному (ожидание ответа перед загрузкой следующего), проблема ушла.
Я получил эту ошибку, когда попытался создать пользовательский CKRecordZone и одновременно сохранить новый CKRecord. Я исправил проблему, поместив сохранение CKRecord в блок завершения метода CKModifyRecordZone.
У меня была такая же проблема с симулятором, пока я не сделал что-то вроде этого:
CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStat, error) in
if (accountStat == .Available) {
print("iCloud is available")
for wishlist in wl {
let wlRecord = CKRecord(recordType: "WishList")
wlRecord.setObject(wishlist.type, forKey: "type")
wlRecord.setObject(wishlist.term_id, forKey: "term_id")
publicDB.saveRecord(wlRecord) {
record, error in
if error != nil {
print(error?.localizedDescription)
} else {
print(record?.objectForKey("type") as! String + " recorded")
}
}
}
}
else {
print("iCloud is not available")
}
}
Надеюсь, поможет.
Для меня я звонил "сохранить новые данные" и "получить данные" и "обновить полученные данные" в том же методе. После удаления "сохранить новые данные" все снова работает нормально.