2015-03-02 71 views
1

我正在学习使用cloudkit来保存和提取记录,但我对将缓存保存到coredata感到困惑。

例如,我提取了几个记录,并使用tableview显示了这种记录类型(比如A,C和F)的一些属性。当我点击一个单元格时,它会显示此记录的详细信息(此记录的所有属性:A B C D E F,但不包括引用属性记录)。 我想知道当我第一次提取记录时,是否应该将这些东西存储到coredata中:“A C F和recordID”?当用户点击查看详细信息时,我再次使用recordID获取?关键是我应该使用什么属性类型来存储CKRecordID/CKRecord?

我知道我可以将图像存储到本地缓存文件(也令人困惑的..),但它不是一个持久存储的权利?我之所以不直接存储记录的所有属性是因为这个记录是一个“邀请”,只有当用户选择接受它时,它才会下载包括一些引用类型属性的所有属性。

任何帮助将有所帮助,谢谢!iOS swift:使用coredata存储缓存(cloudkit)

回答

9

你应该只存档系统字段时cacheing,像这样:

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 enter image description here

+0

,如果我们只是缓存系统文件,如何在设备之间共享数据? Thx – 2016-07-06 08:58:29

+0

如果您想了解更多信息(如果您不想观看所有内容,可以在分钟31:10开始),我真的鼓励您检查我的答案中链接的视频,但一般来说,'ChangeTag '字段将决定您是否需要将您的本地数据与云版本同步... – Ben 2016-08-31 23:57:20