iOS 应用在设备设置页面禁用 iCloud 驱动器(关闭)并获取 iCloud persistentStore

Posted

技术标签:

【中文标题】iOS 应用在设备设置页面禁用 iCloud 驱动器(关闭)并获取 iCloud persistentStore【英文标题】:iOS app disable iCloud drive(off) in device settings page and get iCloud persistentStore 【发布时间】:2015-08-06 16:10:20 【问题描述】:

我正在开发带有 iCloud 同步功能的 ios 应用。我使用支持 iCloud 同步的核心数据存储数据,然后如果我在设备设置中关闭 iCloud 驱动器,我的应用无法读取 UbiquityContainer 中存储的数据。现在我想在用户 iCloud 驱动器关闭时将 iCloud 持久性存储数据迁移到本地/其他地方。但我无法获得 iCloud 持久性存储。我尝试了以下方法不起作用。

NSPersistentStore *result = [self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                               configuration:nil
                                         URL:storeURL
                                     options:options
                                       error:nil];

结果返回零。因为我无法获得无处不在的商店的确切 storeURL。

 NSURL *iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"iCloud.com.Identifier"];

给出 nil 而不是 url。有没有办法在关闭 iCloud 驱动器后获取 iCloud 商店。因为我无法显示存储在数据中。

【问题讨论】:

我正在尝试维护本地 (document/local.db) 和 iCloud (document/ubiqutycontainter/..../iCloud.db) 数据库都将维护相同的数据。如果 iCloud 关闭意味着不需要迁移。这是正确的方法吗?以及如何同步我的本地和 iCloud 数据库? 一旦您退出 iCloud,您将无法访问 ubiquity 容器,这就是为什么您需要有一个 App 设置包,用户可以在退出 iCloud 之前为该应用关闭 iCloud .然后,您的应用程序会将 iCloud 商店移动到本地商店。在此处查看示例应用程序 ossh.com.au/design-and-technology/software-development/… 嗨@DuncanGroenewald 我正在使用应用程序设置将 iCloud 数据库迁移到本地,反之亦然。我的问题是当用户没有在应用程序设置中关闭 iCloud 并从 iCloud 帐户注销时,我的帮助就更少了。应用无法显示用户输入的任何数据。 没错,您的应用程序需要检测 iCloud 何时关闭但应用程序自己的 iCloud 设置为 ON,然后告诉用户如果他们想访问他们的数据,他们需要重新登录iCloud。我建议您测试一下 Apple 自己的应用程序是如何工作的,例如页面或数字。 @DuncanGroenewald 感谢您的快速回复,我会检查并通知您。 【参考方案1】:

请参阅以下 Apple 文档摘录 (https://developer.apple.com/library/ios/documentation/General/Conceptual/iCloudDesignGuide/Chapters/DesignForCoreDataIniCloud.html)

为您的 iCloud Core Data 应用设计启动序列

当您采用 iCloud 时,在为您的应用设计启动顺序时要特别小心。以下因素会起作用,您必须考虑这些因素:

用户之前可能或可能没有表示偏好 在您的应用程序中使用 iCloud;您的应用程序的本地实例可能会或可能会 尚未普遍建立其初始商店 容器。

作为启动顺序的第一步,请阅读本地 用户使用共享的 NSUserDefaults 对象默认数据库。中 操作您的应用程序,使用该对象来保存用户选择 您将需要在下次发布时使用。

用户可能会退出 iCloud 或切换到另一个帐户。

如果用户退出 iCloud,或切换到另一个帐户,无处不在 以前使用的帐户的容器不再可用于 你的应用程序。

本地 Core Data 存储可能比上的存储更新或更旧 同一用户拥有的另一台设备。

在应用启动期间,Core Data 可能需要将本地存储与来自 iCloud 的更改日志进行协调。 这可能涉及检测和解决重复记录和 冲突。测试至关重要。要开始使用一些提示,请参阅 测试和调试您的 iCloud 应用程序以及最佳实践 和 iCloud 核心数据编程指南中的故障排除。

【讨论】:

以上是关于iOS 应用在设备设置页面禁用 iCloud 驱动器(关闭)并获取 iCloud persistentStore的主要内容,如果未能解决你的问题,请参考以下文章

ios icloud 在设备中以编程方式设置开/关

Yosemite、iOS 8 和 iCloud 驱动器:将移动设备同步到桌面?

在 iPhone 设置中禁用每个应用程序的 iCloud

在禁用 iCloud 驱动器的情况下运行 CloudKit 应用程序

iCloud KeyValueStore 首选项更改并在各种设备上处理它们

iCloud:如何存储不在文档中的数据?