本文简单介绍CoreData在iCloud的接口设计和CloutKit的接口设计,由于个人对core data、icloud和cloudkit了解有限,如有错误请指出,谢谢。

要了解接口设计之前,先要介绍几个Framework,包括Core Data, Persistent, Predicate, iCloud, CloudKit,相关内容较多,本文无法一一叙述,只能围绕我们关注的点大致描述,具体相关文献可点击链接查看。

1, CoreData简介

CoreData提供一系列接口来解决结构化数据的关联和持久化相关工作,其中包括以下能力:

  1. Model对象关系管理
  2. Verify对象属性
  3. 数据库升级Migration
  4. 管理对象生命周期
  5. Merge Policies

如上图,MyPersistentDocument对象包含Employee和Department类的成员,通过查询持久化存储层,能返回相应的Document,并且能把子成员也一起查询出来。应用层无需关注持久话的存储文件格式,只需要在Xcode中定义好Model和之间的关系即可,如:

2, Query in CoreData

CoreData中的相关对象,提供了很多不同的类来定制查询范围或者条件,如NSPredicate,NSSortDescriptor等.

如上代码,Sorter作用于查询的排序,而predicate则能约束查询的model范围,通过predicate和sorter的组合即可实现SQL的条件Query能力。除此之外,CoreData的Query还支持Cache能力。

3, Persistent类型

Persistent是数据存储到文件类型,一般有4种: XML, Atomic, SQLite, In-Memory。 其比较如下图:

其中Aotmic是用户本地自定义的存储格式,这种存储格式的文件会被认为是一个非结构化文件。

4, iCloud的Docuemnt同步

iCloud是Apple提供的一个多端同步的功能,支持结构化和非结构化数据。其中会自动同步App目录下的Documents目录,当Documents目录下发生文件变化或者目录变化,会自动同步相关文件,并支持以下特性:

1) 目录同步

2) Document增量同步

3) 多端自动同步

5, iCloud的CoreData同步

CoreData结合iCloud,可以同步各种各样的结构化数据,对于iCloud对结构化数据的同步模型,在官方文档有如下分类:

  1. 使用Atomic的Persistent存储的数据(如XML,ini方式),则使用非结构化同步
  2. 使用SQLite的Persistent存储的数据,则基于Record的Change同步
  3. Document的meta信息默认用SQLite,也可以手动修改成Atomic

基于SQLite的iCloud同步接口

主要文献在这里, 这里先简单叙述一下。

核心步骤:

  1. 配置SQLite的Persistent支持iCloud同步,并指定nameKey
  2. 主要监听几个通知,包括StoresWillChange, StoresDidChange, StoreDidImportChanges几个通知,并处理相应的record存储、冲突处理等。

CoreData接口只需要添加简单的配置,就能接入iCloud。除此之外,还能做到自动升级,比如本地数据库版本v1,iCloud数据库版本v2,可以通过Lightweight migration自动升级。

6, CloudKit

CloudKit是2014年Apple推出的一套新的云端备份结构化(k-v)和非结构化数据的一套接口,CloutKit官方文献说到CloudKit并不建议用于local storage,基于CloudKit开发者可以控制何时备份云端数据或者把本地数据Push到云端。

CloutKit接口简介

CloutKit提供的数据类型是K-V结构的,可定义的Value类型如上,Key都是字符串。从Value类型上可以看出,CloutKit是不支持类型关联的。

1) 创建Record

2) Save Record

从上面代码可以看到,CloutKit可以让用户创建publicCloudDatabase(云端DB)和privateCloudDatabase(本地DB),然后可以把数据异步写入到对应Database里。

3) 主动从云端抓取Record

4) 条件批量抓取云端Record

5) 订阅云端Record变化

可通过相应接口监听云端record变化,相应通知后本地可以做相关处理

6) 结构化数据同步

CKAsset是一个资源类型,当一个资源类型作为某结构化数据的value记录时,那么这个Record在save后,该资源文件也会被自动上传到iCloud



评论需要翻墙 for disqus