有关您的 cloudkit 架构的更多信息会有所帮助,但假设您使用 publicDB 来存储信息,当用户第一次采取将数据保存到 cloudkit 的操作时,将为用户创建一条唯一记录。
因此,您可以检查并查看 cloudkit 中 User 对象的 createDate 时间戳,并与当前时间进行比较(有点笨拙,但可能)。
获取用户的示例代码:
iCloudUserIDAsync { (recordID: CKRecord.ID?, error: NSError?) in
if let userID = recordID?.recordName {
self.loggedInUserID = userID
self.loggedInWithiCloud = true
} else {
self.loggedInWithiCloud = false
print("Fetched iCloudID was nil")
}
}
或者,更优雅的是,您可以在首次启动时将布尔标志写入用户对象 CloudKit(或在 CoreData 中本地)。然后在任何启动时为登录的 iCloud 用户获取整个用户对象,然后您可以对其进行初始化,然后从那里对您的布尔变量进行操作。
获取完整用户并在本地对其进行初始化的示例代码:
CKContainer.default().publicCloudDatabase.fetch(withRecordID: userRecordID) { (results, error ) in
if results != nil {
//now that you have the user, you can perform your checks
self.currentUser = MyUser(record: results!)
}
if let error = error {
print("couldn't set user reference")
}
DispatchQueue.main.async {
completion(nil)
}
}