Core data 如何检测特定用户首次启动iOS应用程序(不是在特定设备上)?
我正在我的应用程序中使用cloudKit+核心数据(iOS 13+)(swift) 我不知道如何检测应用程序的第一次运行,而不管设备如何初始化一些默认数据 关于如何在特定设备上检测iOS应用程序的首次启动,有很多帖子。我找不到为特定用户检测应用程序第一次运行的解决方案,或者换句话说,如果用户的iCloud中确实存在具有特定容器标识符的初始化容器 如果用户之前已经在另一台设备上使用过该应用程序,那么在新设备首次启动时,将与iCloud同步,该应用程序将使用用户的数据。但是如果用户以前从未使用过应用程序,我需要初始化一些数据 我花了几个小时在寻找如何处理这件事的线索,却找不到任何相关的线索。 有什么想法吗Core data 如何检测特定用户首次启动iOS应用程序(不是在特定设备上)?,core-data,cloudkit,nspersistentcloudkitcontainer,Core Data,Cloudkit,Nspersistentcloudkitcontainer,我正在我的应用程序中使用cloudKit+核心数据(iOS 13+)(swift) 我不知道如何检测应用程序的第一次运行,而不管设备如何初始化一些默认数据 关于如何在特定设备上检测iOS应用程序的首次启动,有很多帖子。我找不到为特定用户检测应用程序第一次运行的解决方案,或者换句话说,如果用户的iCloud中确实存在具有特定容器标识符的初始化容器 如果用户之前已经在另一台设备上使用过该应用程序,那么在新设备首次启动时,将与iCloud同步,该应用程序将使用用户的数据。但是如果用户以前从未使用过应用
提前谢谢你的帮助 有关cloudkit架构的更多信息会有所帮助,但假设您使用publicDB存储信息,当用户第一次执行将数据保存到cloudkit的操作时,将为用户创建一个唯一的记录 因此,您可以在cloudkit中检查并查看用户对象的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)
}
}
关于cloudkit模式的更多信息可能会有所帮助,但假设您使用publicDB存储信息,当用户第一次执行将数据保存到cloudkit的操作时,将为用户创建一个唯一的记录 因此,您可以在cloudkit中检查并查看用户对象的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)
}
}
只需在云端查看初始数据?是的。如果有的话,也没有。只要看看云上的初始数据就可以了?是的。如果有的话,也没有。