CKServerChangeTokenはNSObjectのを継承します(NS)データにトークンを変換するNSKeyedArchiverとNSKeyedUnarchiverを使用できることを意味NSCopyingプロトコルに準拠した不透明なデータオブジェクトでありますオブジェクト。
データオブジェクトは、任意のNSManagedObjectのプロパティに格納できます。あるいは、このデータを(NS)UserDefaultsに保存することもできます。ここでUserDefaultsへの迅速な拡張として、これを達成するために一つの方法です:CKServerChangeToken右から設定あなたが得ることができる。この拡張/で
import Foundation
import CloudKit
public extension UserDefaults {
public var serverChangeToken: CKServerChangeToken? {
get {
guard let data = self.value(forKey: "ChangeToken") as? Data else {
return nil
}
guard let token = NSKeyedUnarchiver.unarchiveObject(with: data) as? CKServerChangeToken else {
return nil
}
return token
}
set {
if let token = newValue {
let data = NSKeyedArchiver.archivedData(withRootObject: token)
self.set(data, forKey: "ChangeToken")
} else {
self.removeObject(forKey: "ChangeToken")
}
}
}
}
と(NS)UserDefaults:
let changeToken = UserDefaults.standard.serverChangeToken
UserDefaults.standard.serverChangeToken = `newToken`
ありがとう@richardpiazzaは。あなたは、実際には、メモリの変更だけでなく、アプリケーションの実行よりも長く変更トークンをキャッシュすることになっていることを誰でも確認できますか?ドキュメンテーションは私にあいまいです。 – vegashacker
@vegashacker呼び出しで変更トークンを指定したくない唯一の理由は、レコードゾーンのすべての変更を強制的に取得することです。 WWDC 2016のCloudKit Best Practicesビデオをご覧ください。関連するタイムインデックスへのリンクは次のとおりです。https://developer.apple.com/videos/play/wwdc2016-231/?time=822 – richardpiazza
WWDC 2016ビデオ " CloudKitのベストプラクティス(15'45 ")では、アプリのデータキャッシュが最新の状態になっているかどうかを正確に把握できるように、キャッシュを実行する必要があります。 https://developer.apple.com/videos/play/wwdc2016/231/をご覧ください。 –