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 Best Practices (15'45 ")는 앱의 데이터 캐시가 최신 상태인지 알 수 있도록 실행 시간에 정확하게 캐시되어야한다고 말합니다. https://developer.apple.com/videos/play/wwdc2016/231/을 참조하십시오. –