2015-03-02 70 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