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

时间:2015-03-02 14:40:59

标签: ios swift core-data cloudkit

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

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

我知道我可以将像image这样的东西存储到本地缓存文件中(也令人困惑......),但它不是持久存储吗?我之所以不直接存储记录所有属性的原因是因为此记录是一个"邀请",只有当用户选择接受它时,它才会下载所有属性,包括一些参考类型属性。

任何帮助都会有所帮助,谢谢!!

1 个答案:

答案 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
}

31:10 WWDC 2015 - Session 715 - iOS, OS X enter image description here