2016-11-14 2 views
2

Cloud 데이터 및 Core Data with Swift를 사용하여 데이터를 동기화합니다. 따라서 구독을 만들었고 알림을받은 후 클라우드에서 새 데이터를 가져 와서 핵심 데이터를 업데이트합니다. 이 업데이트를 처리하는 데 권장되는 방법입니다. 데이터 변경 사항을 가져 오려면 CKServerChangeToken을 삽입하여 새로운 내용을 가져올 수 있습니다. 내 질문은 요청을 나중에 가져올 수 있도록 코어 데이터에 토큰을 저장하는 방법입니다. CKR 코드에는 메타 데이터 만 저장하는 방법이 있지만 CKServerChangeToken에는 이와 같은 것이 없습니다. 누구나 아이디어가 있습니까?코어 데이터에 CKServerChangeToken 저장

안부, Jannik

답변

10

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` 
+0

감사 @richardpiazza은. 누구든지 변경 토큰을 앱 실행보다 오랫동안 캐시에 저장한다고 가정 할 수 있습니까? 설명서가 모호한 것 같습니다. – vegashacker

+0

@vegashacker 호출에서 변경 토큰을 제공하지 않으려는 유일한 이유는 레코드 영역에서 모든 변경 내용을 강제로 검색하는 것입니다. WWDC 2016의 CloudKit Best Practices 비디오를 살펴보십시오. 다음은 관련 시간 인덱스에 대한 링크입니다. https://developer.apple.com/videos/play/wwdc2016-231/?time=822 – richardpiazza

+0

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