Cloud Kit 핵심 데이터 레코드 쿼리
Sep 03 2020
CloudKit을 사용하여 핵심 데이터를 저장하여 장치간에 동기화 할 수 있도록 마이그레이션하려는 앱이 있습니다.
동기화가 제대로 작동하고 있는데 문제는 앱이 일부 초기 데이터를 데이터베이스에 추가한다는 것입니다. 이로 인해 다른 장치에 설치할 때 데이터가 복제됩니다. 현재는 첫 번째 실행이 수행 된 경우 사용자 기본값을 사용하여 bool을 로컬에 저장하고 있는데, 이는 분명히 장치별로 만 작동합니다.
데이터가 이미 클라우드에 있는지 확인하고 초기 데이터 추가를 방지 할 수있는 방법이 있습니까?
애플의 문서는 객체가 이미 존재하지만 처음 시작할 때 로컬 상점에 객체가없는 경우 가능하다고 제안합니다. https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/reading_cloudkit_records_for_core_data
답변
1 SteveB Sep 04 2020 at 15:00
두 장치가 동일한 CloudKit 로그인을 사용한다고 가정하고 확인하려는 데이터가 사용자 레코드에 저장되어 있으면 다음을 수행 할 수 있습니다.
- 해당 사용자의 CloudKit ID 확보
func iCloudUserIDAsync(complete: @escaping (_ instance: CKRecord.ID?, _ error: NSError?) -> ()) {
let container = CKContainer.default()
container.fetchUserRecordID() {
recordID, error in
if let error = error {
//handle
} else {
self.userRecordID = recordID
complete(recordID, nil)
}
}
}
- 그런 다음 해당 ID를 사용하여 사용자를 다시 가져올 때 CloudKit을 쿼리합니다.
CKContainer.default().publicCloudDatabase.fetch(withRecordID: userRecordID) { (results, error ) in
if results != nil {
//got the user record, do what you want with it
}
if let error = error {
//handle error
}
}
또는 데이터가 사용자 레코드에없는 경우 CKQueryOperation 및 조건자를 사용하여 쿼리를 수행 할 수 있습니다. 여기에 좋은 자습서 : https://www.raywenderlich.com/4878052-cloudkit-tutorial-getting-started