我一直在使用CloudKit,我的印象是用户需要登录到iCloud
才能使用CloudKit
中的私有数据库,但我不认为这是真的。
我正在测试一个在CloudKit
中成功与私有数据库通信的应用程序,我可以在其中读取和写入记录。令我惊讶的是,我从我的iCloud
帐户和Sandbox Account
注销,我仍然可以从CloudKit
中读取和写入记录,这是出乎意料的,我在想注销后我将无法与CloudKit
通信,事实上,我从手机中删除了该应用程序,在Xcode中重新编译,该应用程序仍然可以与CloudKit
通信。
这是正常行为吗,CloudKit
在没有用户登录iCloud
的情况下工作吗?
有人可以解释一下与CloudKit
的连接是如何工作的吗?
连接到私有数据库
let privateDatabase = CKContainer.default().database(with: .private)
阅读记录
privateDatabase.perform(query, inZoneWith:nil){( results , error) in ... }
写作记录
privateDatabase.save(ckRecord){ (record, error) in ...}
您应该无法写入 CloudKit(如果未登录,则为公共或私有数据库(...
在我的应用程序中,如果我尝试在不登录 iCloud 的情况下写入 CloudKit(公共数据库(,则会收到错误:
保存错误:保存记录时出错<CKRecordID:0x7f91727cf0c0;>default所有者>到服务器:不写入操作 允许
您确定设备已注销吗? 只是为了仔细检查 - 为什么你相信你能够读/写? 是没有错误还是您正在通过仪表板验证保存?
根据某人的建议,使用以下内容检查他们是否已登录:
CKContainer.default().accountStatus { (accountStatus, error) in
if accountStatus == .available {
print("iCloud app container and private database is available")
} else {
print("iCloud not available (String(describing: error?.localizedDescription))")
}
}