我CloudKit
用来存储公开可用的数据,并将新数据NSPersistentCloudKitContainer
作为我的核心数据堆栈的一部分来存储/同步私有数据。
当用户打开我的应用程序时,他们处于 4 种状态中的 1 种状态:
- 他们是可以访问 iCloud 的新用户
- 他们是可以访问 iCloud 的老用户
- 他们是新用户,但由于某种原因无法访问 iCloud
- 他们是老用户,但由于某种原因无法访问 iCloud
状态 1 和 2 代表我的快乐之路。如果他们是新用户,我想在显示初始视图之前用一些数据播种用户的私人商店。如果他们是返回用户,我想从 Core Data 获取数据以传递给初始视图。
确定新老用户:
我的计划是使用NSUbiquitousKeyValueStore
. 我对此的担忧是处理以下情况:
下载应用程序->被记录为之前启动过应用程序->删除并在新设备上重新安装/安装应用程序
我认为NSUbiquitousKeyValueStore
需要一些时间来接收更新,所以我需要等到它完成同步后再移动到初始视图。那么问题来了,如果他们无法访问 iCloud,会发生什么?NSUbiquitousKeyValueStore
如果无法接收更新,如何告诉我他们是否是回访用户?
确定 iCloud 访问权限:
根据我所做的研究,我可以检查iCloudFileManager.default.ubiquityIdentityToken
是否nil
可用,但这不会告诉我原因。我将不得不使用CKContainer.default().accountStatus
来了解为什么 iCloud 不可用。问题是这是一个异步调用,我的应用程序会在了解他们的帐户状态之前继续前进。
我真的在这个问题上摸不着头脑。优雅地确保处理所有这些状态的最佳方法是什么?