尝试保存记录时,Cloudkit会出错

时间:2014-11-01 04:47:47

标签: macos swift icloud cloudkit icloud-api

我试图将记录保存到用户私有数据库但是当我运行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 个答案:

答案 0 :(得分:16)

我发现在升级到iCloud硬盘之前我根本无法连接到CloudKit;在我的情况下,我能够在模拟器中做到这一点。如果你设置了双因素身份验证,你也无法在模拟器上登录iCloud。

答案 1 :(得分:2)

我在尝试将记录列表一次性上传到数据库时遇到此错误。当我一次一个地做(在上传下一个之前等待回复)时,问题就消失了。

答案 2 :(得分:2)

发生了同样的事情,因为我试图从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];

    }
}

答案 3 :(得分:1)

当我尝试创建自定义CKRecordZone并同时保存新的CKRecord时,出现此错误。我通过将CKRecord保存放在CKModifyRecordZone方法的完成块中来解决问题。

答案 4 :(得分:0)

对我来说 我打电话给#34;保存新数据"和"检索数据"和"更新检索到的数据"用同样的方法。 一旦删除"保存新数据"一切正常。

答案 5 :(得分:0)

我遇到了与模拟器相同的问题,直到我做了类似的事情:

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")
        }
    }

希望它有所帮助。