Membuat Kueri Catatan Data Inti Cloud Kit
Saya memiliki aplikasi yang saya coba migrasikan untuk menggunakan CloudKit untuk menyimpan data inti sehingga dapat disinkronkan di seluruh perangkat.
Sinkronisasi berfungsi dengan baik, masalah yang saya alami adalah bahwa aplikasi menambahkan beberapa data awal ke database, ini menyebabkannya digandakan ketika dipasang di perangkat lain. Saat ini saya menggunakan default pengguna untuk menyimpan bool secara lokal jika proses pertama telah dilakukan, yang jelas hanya berfungsi per perangkat
Apakah ada cara untuk melihat apakah data sudah ada di cloud dan mencegah penambahan data awal.
Dokumentasi Apple akan menyarankan kemungkinan jika suatu objek sudah ada tetapi pada peluncuran pertama tidak ada objek di toko lokal. https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/reading_cloudkit_records_for_core_data
Jawaban
Dengan asumsi kedua perangkat menggunakan login CloudKit yang sama, jika data yang ingin Anda periksa disimpan di catatan Pengguna, Anda dapat melakukan ini:
- Ambil ID CloudKit untuk pengguna itu
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)
}
}
}
- Kemudian gunakan ID tersebut untuk meminta CloudKit di mendapatkan kembali pengguna:
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
}
}
Alternatifnya, jika data Anda tidak ada di rekaman pengguna, Anda akan ingin melakukan kueri menggunakan CKQueryOperation dan predikat: Tutorial bagus di sini: https://www.raywenderlich.com/4878052-cloudkit-tutorial-getting-started