我正在学习使用cloudkit来保存和获取记录,但我对将缓存保存到coredata感到困惑。
例如,我使用tableview获取了几条记录并显示了这种记录类型的一些属性(比如A,C和F)。当我点击一个单元格时,它会显示此记录的详细信息(此记录的所有属性:A B C D E F,但不包括参考属性记录)。
当我第一次拿到记录时,我想知道是否应该将这些东西存入coredata:" A C F和recordID" ?当用户点击查看详细信息时,我使用recordID再次获取?关键是我应该使用什么属性类型来存储CKRecordID / CKRecord?
我知道我可以将像image这样的东西存储到本地缓存文件中(也令人困惑......),但它不是持久存储吗?我之所以不直接存储记录所有属性的原因是因为此记录是一个"邀请",只有当用户选择接受它时,它才会下载所有属性,包括一些参考类型属性。
任何帮助都会有所帮助,谢谢!!
答案 0 :(得分:10)
您应该在缓存时仅归档系统字段,如下所示:
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
}