【问题标题】:iOS Swift: Local persistence with CloudKitiOS Swift:使用 CloudKit 进行本地持久化
【发布时间】:2015-05-20 09:47:39
【问题描述】:

我正在使用 CloudKit 来获取/存储数据,但也希望有一个本地持久层。 CloudKit 是否提供任何类型的本地存储功能?还是应该使用 NSUserDefaults (NSKeyedArchiver/NSKeyedUnarchiver)?

【问题讨论】:

    标签: ios swift icloud cloudkit


    【解决方案1】:

    CloudKit 没有本地兑现数据的机制,你必须自己做。 我可以建议你看一下EVCloudKitDao,它是 CloudKit 的一个便利库,支持本地兑现到文件。

    【讨论】:

    • 您能推荐任何文章或资源来了解更多关于使用 CloudKit 进行本地存储的信息吗?
    • 查看了 EVCloudKitDao,哇,你是个忍者 :D 你使用任何Core Data,但我理解得很好,你在包中定义了类,并通过反射加载,实例化,设置值?哇,这很难,为什么反射而不是核心数据?基本上核心数据做同样的事情,用更少的样板代码;-)
    • 我正在使用反射来获取和设置来自常规对象的所有值。因此,您唯一需要做的就是在对象中定义属性。然后 EVCloudKitDao 将处理其余部分。它将确保所有属性都将添加到 CKRecord 中,反之亦然。存储到核心数据将是一种选择,但您仍然需要从 CKRecord 解析和解析到 CKRecord。我决定使用 NSCoding 将数据本地存储在文件中,而不是将其写入数据库。
    • 在对象中定义属性仍然比维护 Core Data 容易。除此之外,您只需要使用 EVCloudKitDao,根本不需要任何样板代码。这是我能想到的最精简的使用 CloudKit 的方式。请参阅github.com/evermeer/EVCloudKitDao#how-to-use-the-evcloudkitdata 的代码示例,这就是包含新闻项目的表格所需的全部内容,包括更改的推送通知
    • 有趣的是,我有自己的“EVCloudKitDao”,但我称之为“实用程序”。它和你的代码一样。您的学习曲线在基于反射的解决方案中结束,我在基于核心数据的解决方案中。如果它启动并运行谁在乎。如果您超过了 Core Data 陡峭的学习曲线,那么维护 Core Data 很容易。在 Core Data 编辑器中添加属性或关系需要与将属性添加到源文件中完全相同的按键次数。
    【解决方案2】:

    CloudKit 中没有内置缓存,无论如何,当您实现一个时请记住仅缓存系统字段以恢复并再次与 CloudKit 同步 检查这个https://stackoverflow.com/a/35355916/1787109

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 2012-02-23
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多