iOS swift:使用 coredata (cloudkit) 存储缓存

Posted

技术标签:

【中文标题】iOS swift:使用 coredata (cloudkit) 存储缓存【英文标题】:iOS swift: Store cache using coredata (cloudkit) 【发布时间】:2015-03-02 14:40:58 【问题描述】:

我正在学习使用 cloudkit 来保存和获取记录,但我对将缓存保存到 coredata 感到困惑。 例如,我获取了几条记录并使用表格视图显示了这种记录类型的一些属性(比如 A、C 和 F)。当我单击一个单元格时,它将显示该记录的详细信息(该记录的所有属性:A B C D E F,但不包括参考属性记录)。 当我第一次获取记录时,我想知道是否应该将这些东西存储到 coredata 中:“A C F and recordID”?当用户点击查看详细信息时,我使用recordID再次获取?关键是我应该使用什么属性类型来存储CKRecordID/CKRecord? 我知道我可以将图像之类的东西存储到本地缓存文件(也令人困惑..),但这不是持久存储,对吗?而我之所以不直接存储记录的所有属性是因为该记录是一个“邀请”,只有用户选择接受它才会下载所有属性,包括一些引用类型属性。 任何帮助都会有所帮助,谢谢!

【问题讨论】:

【参考方案1】:

缓存时应该只归档系统字段,如下所示:

private func dataFromRecord(record:CKRecord) -> NSData
    let archivedData = NSMutableData()
    let archiver = NSKeyedArchiver(forWritingWithMutableData: archivedData)
    archiver.requiresSecureCoding = true
    record.encodeSystemFieldsWithCoder(archiver)
    archiver.finishEncoding()
    return archivedData


private func recordFromData(archivedData:NSData) -> CKRecord?
    let unarchiver = NSKeyedUnarchiver(forReadingWithData: archivedData)
    unarchiver.requiresSecureCoding = true
    let unarchivedRecord = CKRecord(coder: unarchiver)
    return unarchivedRecord

31:10 WWDC 2015 - Session 715 - ios, OS X

【讨论】:

如果我们只是缓存系统文件,那么设备之间的数据是如何共享的呢?谢谢 如果您想了解更多信息,我真的鼓励您查看我的答案中链接的视频(如果您不想观看所有内容,可以从 31:10 分钟开始),但是一般来说,“ChangeTag”字段将决定您是否需要将本地数据与云版本同步...

以上是关于iOS swift:使用 coredata (cloudkit) 存储缓存的主要内容,如果未能解决你的问题,请参考以下文章

iOS swift:使用 coredata (cloudkit) 存储缓存

iOS CoreData 增删改查详解

如何使用 swift 在 iOS coredata sqlite 中启用 DELETE MODE

使用 CoreData 以编程方式创建实体/表,并在 Swift 3 for iOS 中将值插入该实体

Step by Step Do IOS Swift CoreData Simple Demo

Swift 中适用于 iOS 9 和 iOS 10 的 CoreData 堆栈