【发布时间】:2020-04-20 05:32:58
【问题描述】:
我使用CloudKit 来存储公开可用的数据,并使用新的NSPersistentCloudKitContainer 作为我的核心数据堆栈的一部分来存储/同步私人数据。
当用户打开我的应用时,他们处于 4 种状态之一:
- 他们是可以访问 iCloud 的新用户
- 他们是可以访问 iCloud 的老用户
- 他们是新用户,但由于某种原因无法访问 iCloud
- 他们是老用户,但由于某种原因无法访问 iCloud
状态 1 和 2 代表我的快乐之路。如果他们是新用户,我想在显示初始视图之前用一些数据播种用户的私人商店。如果他们是返回用户,我想从 Core Data 获取数据以传递给初始视图。
确定新老用户:
我的计划是使用NSUbiquitousKeyValueStore。我对此的关注是处理以下情况:
下载应用程序 -> 记录为之前启动过应用程序 -> 删除并在新设备上重新安装/安装应用程序
我假设NSUbiquitousKeyValueStore 需要一些时间来接收更新,所以我需要等到它完成同步后再进入初始视图。那么问题来了,如果他们无法访问 iCloud,会发生什么?如果收不到更新,NSUbiquitousKeyValueStore 如何告诉我他们是否是回访用户?
确定 iCloud 访问权限:
根据我所做的研究,我可以检查 FileManager.default.ubiquityIdentityToken 是否为 nil 以查看 iCloud 是否可用,但这不会告诉我为什么。我必须使用CKContainer.default().accountStatus 来了解为什么 iCloud 不可用。问题是这是一个异步调用,我的应用会在了解其帐户状态之前继续运行。
我真的在这个问题上摸不着头脑。优雅地确保处理所有这些状态的最佳方法是什么?
【问题讨论】:
-
您最终解决了这个问题吗?你是如何解决第 3 点和第 4 点的?我目前正在处理同样的问题,但还没有找到一个超级优雅的解决方案来解决用户未连接到 iCloud 的问题。
-
目前,我还没有找到完全满意的答案。正如一些人所建议的那样,没有一个单一的解决方案。目前,我将像用户可以访问 iCloud 一样处理我的应用程序。
标签: ios core-data cloudkit nsubiquitouskeyvaluestore nspersistentcloudkitcontainer