【问题标题】:CoreData and iCloudCoreData 和 iCloud
【发布时间】:2013-06-08 13:11:57
【问题描述】:

我正在开发一个核心数据应用程序,并正在考虑添加 iCloud 支持,但是在网上浏览后,我经常听说 iCloud+CoreData 不可靠,并且经常会崩溃。

这是真的吗?我正在阅读的一本关于核心数据主题的书提到 iCloud+CoreData 在 iOS 5 中不可靠,但此后已得到修复,但我也听到相反的说法,即 iCloud+CoreData 在 iOS 6 中仍然不可靠。如果是这样,存储自定义格式的数据库有帮助吗?

【问题讨论】:

  • 即使在 iOS 6 中,许多开发人员仍然遇到 Core Data iCloud 同步问题:请参阅 this article 了解最近的观点。 iOS 7 中的情况可能有所改善:它仍处于 NDA 之下,所以还没有人分享他们的经验。
  • @Amy 让我感到困惑的是,有些人说它有效,有些人说它不会,当然如果 iCloud+CoreData 存在结构性问题,它们的效果将是普遍的。顺便说一下,链接的文章提到了 TICoreDataSync,你有使用过这个框架的经验吗?
  • 我刚刚发布了一个示例 iOS 库风格的核心数据应用程序,其中包括 iCloud 集成。该应用程序包含一个设置包,供用户切换“使用 iCloud”首选项设置,并将根据用户设置将商店迁移到 iCloud 和从 iCloud 迁移。从下面的链接下载 - 对文档感到抱歉 - 会在某个时候解决这个问题,但它的工作方式与 UIManagedDocument 示例大致相同。 ossh.com.au/design-and-technology/software-development

标签: ios cocoa-touch core-data icloud


【解决方案1】:

现在 iOS 7 已经发布了,我们可以谈谈它。一切似乎都表明,在 iOS 7 中,iCloud 核心数据同步已得到修复。我即将将 iCloud Core Data 同步添加到我正在构建的(仅限 iOS 7)应用程序中,所以我还不能从个人经验中说出来,但我所听到的一切都表明它现在适合黄金时段。

我强烈建议观看 WWDC 2013 的“Core Data 和 iCloud 的新功能”会议视频:https://developer.apple.com/videos/wwdc/2013/?id=207(需要 Apple 开发人员计划会员资格)。我已经看了两遍了,他们确实让事情变得很多更简单了。

最后,我建议查看 GitHub 上的 UbiquityStoreManager。这是一个库,几乎可以为您完成 iCloud Core Data 的所有痛苦部分。它已被修改以考虑到 iOS 7 中的重大改进,但如果您想利用它们,您的应用程序必须仅是 iOS 7(无论您是否使用该库都适用)。

更新:自从发布此答案后,我现在可以根据个人经验发言,并且可以确认 iOS 7 中的 Core Data iCloud Sync 是坚如磐石的,更重要的是,令人难以置信的容易实现。我没有使用UbiquityStoreManager 或任何其他第三方库就将它添加到我的应用程序中,这非常简单。字面意思就是几行代码。

编辑:我使用我的 iCloud Core Data 堆栈为 iOS 7 创建了一个 GitHub 存储库。希望它有所帮助: https://github.com/mluisbrown/iCloudCoreDataStack

【讨论】:

  • 您能谈谈这段时间的个人经历吗?
  • @AlexanderLongbeach 不知道,但我认为这只是访问 iCloud 服务器所需的时间。 AFAIK,您无能为力。我注意到在模拟器上你几乎必须手动强制同步(⇧⌘I),否则它将永远需要。设备上没有问题。
  • 谢谢 :) 太棒了!继续更新这个 github repo。喜欢它
  • 终于,core data 和 iCloud 一起工作了!与 GIT 的出色合作,整个网络上的最佳答案 :-)
  • 事情仍然没有答案所暗示的那么乐观。自推出以来,我们就使用 iCloud + Core Data 堆栈,并且还经历了 Apple 的所有内部迭代以改进堆栈。虽然当前堆栈确实比旧堆栈运行得更好,但我们仍然在过去几周的 Beta 测试中发现了无法修复的问题(基本上是最坏的情况:丢失用户数据)。
【解决方案2】:

@mluisbrown 提到的视频/链接(https://developer.apple.com/videos/wwdc/2013/?id=207)似乎不再可用。

截至 2021 年有更新版本: https://developer.apple.com/videos/play/wwdc2021/10015/

【讨论】:

  • 谢谢。我已经更新了答案中的链接,并对你的答案投了赞成票,以帮助你获得 50 多位代表 :)
【解决方案3】:

在 macOS 10.15 和 iOS 13 中,Apple 引入了NSPersistentCloudKitContainer

一个容器,它将核心数据堆栈封装在您的应用中,并将选择的持久存储镜像到 CloudKit 私有数据库。

链接:

Apple Documentation: Mirroring a Core Data Store with CloudKit

Apple Sample Code: Synchronizing a Local Store to the Cloud

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多