Core data 如何检测特定用户首次启动iOS应用程序(不是在特定设备上)?

Core data 如何检测特定用户首次启动iOS应用程序(不是在特定设备上)?,core-data,cloudkit,nspersistentcloudkitcontainer,Core Data,Cloudkit,Nspersistentcloudkitcontainer,我正在我的应用程序中使用cloudKit+核心数据(iOS 13+)(swift) 我不知道如何检测应用程序的第一次运行,而不管设备如何初始化一些默认数据 关于如何在特定设备上检测iOS应用程序的首次启动,有很多帖子。我找不到为特定用户检测应用程序第一次运行的解决方案,或者换句话说,如果用户的iCloud中确实存在具有特定容器标识符的初始化容器 如果用户之前已经在另一台设备上使用过该应用程序,那么在新设备首次启动时,将与iCloud同步,该应用程序将使用用户的数据。但是如果用户以前从未使用过应用

我正在我的应用程序中使用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)
        }
    }

只需在云端查看初始数据?是的。如果有的话,也没有。只要看看云上的初始数据就可以了?是的。如果有的话,也没有。