热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何有效地同步CoreData和CloudKit之间的记录

如何解决《如何有效地同步CoreData和CloudKit之间的记录》经验,为你挑选了3个好方法。

我目前正在学习如何使用CloudKit Framework以及缺少显示如何同步Core Data和CloudKit的文档或示例.

我观看了所有WWDC视频(2014年,2015年,2016年)专门介绍CloudKit,但没有人告诉我们如何实现与Core Data的同步.我找不到任何新的示例,教程或书籍,展示了如何实现此同步.

我知道使用CloudKit的Operations API(不是Convenience API)和订阅更新是有效的,就像在新的WWDC 2016视频中所说的那样,专用于CloudKit,但使用CoreData进行映射是一个真正的问题.

例如,假设我想创建一个类似于Notes应用程序的应用程序.离线时,用户可以创建他的笔记并与他们一起工作,将他们保存到他的核心数据库中.当设备上线时,应用程序会检查服务器上的更改并将新创建的记录保存到服务器(CloudKit).

当应用程序启动时,它还会从CloudKit获取更改,如果有更改,它会使用新更改更新本地缓存(核心数据).

我希望有一个共同的同步模式.在哪里与Core Data方法同步以及它们应该如何?

非常感谢有关此的任何信息或帮助.

我正在使用Swift 3,Xcode 8,iOS 10.



1> Owen Godfrey..:

核心数据已经为用户提供了同步到iCloud的能力.没有必要使用CloudKit.

在iCloud中设计核心数据

但是,使用iCloud的Core Data已被弃用.即便如此,它还没有停产,苹果公司没有立即停止计划,他们只是想阻止它的使用.但它也存在合理化来自多个设备的更新的问题.

无论如何,我一直在研究如何使用云套件来解决这个问题.两个答案; 首先是使用以下内容;

在GitHub缝

第二是手动完成;

设计CloudKit

关键在于Cloud Kit需要记录元数据才能可靠地处理记录更新,因此您必须将该元数据保存在Core Data数据库中.该CKRecord类包含一个方法encodeSystemFields(用:)这将编码这些字段转换为可存储在数据库中的数据记录,然后当你需要恢复CKRecord您可以使用相应的解码器.

无论如何,我即将开始自己这样做.当我拥有它时,我会用更多信息更新它.


自iOS 10起,不推荐使用CoreData iCloud。

2> Jake3231..:

苹果公司最近发布了一份指南,似乎可以回答这个问题。查看Apple 维护CloudKit记录的本地缓存以了解如何在设备上存储CloudKit数据。

虽然本指南未提供要写入设备的示例代码,但确实回答了其余问题。这告诉您如何从CloudKit中获取更改并创建可以存储在设备上的数据。



3> Simon Backx..:

从iOS 13开始,有新的API可以简化开发人员的同步。我建议您观看WWDC19会话,了解CoreData和CloudKit之间的新同步。请注意,这些新API仅适用于iOS 13+。

视频:https : //developer.apple.com/videos/play/wwdc2019/202/

简而言之,您需要开始使用NSPersistentCloudKitContainer而不是NSPersistentContainer。这将使同步使用自动冲突解决方案和最后作者获胜的合并策略自动进行。如果您想构建一个运行良好的应用程序,则还需要进行一些修改以改善应用程序的同步。

官方文档可以在以下位置找到:

使用CloudKit设置核心数据

将核心数据存储与CloudKit同步


协作的数据建模(无冲突的复制数据类型)

在会议结束时,他们还展示了一个比默认的“最后作家胜出的合并策略”更好的同步合并的示例。使用因果树可让多个用户编辑同一字符串(并扩展某些类型的其他数据)而不会丢失任何数据。我真的建议大家阅读Archagon的这篇文章,其中描述了它的工作原理和实现方式(也包括CloudKit同步,但不是自动的)。如会话中所示,您还可以通过CoreData和CloudKit之间的新自动同步来实现这一点。


推荐阅读
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • This feature automatically validates new regions using the AWS SDK, ensuring compatibility and accuracy. ... [详细]
  • 如何在服务器上配置SSL证书
    SSL证书是用于验证互联网上身份的一种数字凭证,通过启用HTTPS协议,确保用户与服务器之间的通信安全。本文将详细介绍如何在API和服务器上配置SSL证书,以提升网站的安全性和可信度。 ... [详细]
author-avatar
哓尐_271
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有