首页 > 解决方案 > 如果在与 iCloud 共享数据的 iOS 应用上安装了默认数据,如何保存

问题描述

我现在正在用 SwiftUI 开发一个 iOS 应用程序。在第一次运行应用程序时,我将默认数据保存到 CoreData,然后与 CloudKit 同步,以使其在使用相同 Apple Id 的所有设备上可用。

我想防止应用程序多次保存默认数据(例如,当数据已经保存在 CloudKit 中并且其他设备不需要再次保存它,因为它可以从 iCloud 中提取它)。这样做我已经尝试了不同的方法,但这并没有让我达到目标:

  1. 我试图将一个特定的平面保存到 CoreData 并将其同步到 iCloud,这是一个名为“isAlreadyInstalled”的布尔值。启动应用程序时,我从 CoreData 获取它,并在必要时跳过默认数据的安装。这种方法的问题是我不能等待 CloudKit 与我的 CoreData 数据库同步,这意味着“isAlreadyInstalled”值总是错误的。我也尝试过每次启动时休眠几秒钟,但是当 CoreData 和 CloudKit 数据库变大时,每次启动应用程序时,休眠时间对用户来说非常不方便。

  2. 我尝试使用 NSUbiquitousKeyValueStore,这似乎是一个完美的解决方案。但是在卸载并重新安装我的应用程序并清除 CloudKit 数据库后,NSUbiquitousKeyValueStore 没有被清除,这意味着不会安装默认数据。当应用程序将被卸载时,我已经在寻找清除 NSUbiquitousKeyValueStore 但这是不可能的。

我现在有点困惑,因为我找不到任何方法使安装依赖于 iCloud 同步或等待 iCloud 同步发生。

仅供参考:我没有在我的 AppDelegate 中加载 persistentStoreContainer,因为我编写了自己的 CoreDataHelper-Class,我在其中执行了所有 CoreData 魔术。我无法想象我的问题没有解决方案,因为安装默认数据并在不同的 iCloud 设备之间共享它似乎很常见。

我真的很感激任何帮助,如果有必要当然可以分享一些代码!

标签: ioscore-dataswiftuicloudkit

解决方案


推荐阅读