Consulta de registros de datos básicos de Cloud Kit
Tengo una aplicación que estoy tratando de migrar para usar CloudKit para almacenar los datos principales para que se puedan sincronizar en todos los dispositivos.
La sincronización funciona bien, el problema que tengo es que la aplicación agrega algunos datos iniciales a la base de datos, esto hace que se duplique cuando se instala en otro dispositivo. Actualmente estoy usando los valores predeterminados del usuario para almacenar un bool localmente si se realizó la primera ejecución, que obviamente solo funciona por dispositivo
¿Hay alguna forma de ver si los datos ya existen en la nube y evitar la adición de los datos iniciales?
La documentación de Apple sugiere que es posible si un objeto ya existe, pero en el primer lanzamiento no hay objetos en la tienda local. https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/reading_cloudkit_records_for_core_data
Respuestas
Suponiendo que ambos dispositivos estén usando el mismo inicio de sesión de CloudKit, si los datos que desea verificar están almacenados en el registro de usuario, puede hacer esto:
- Obtenga el ID de CloudKit para ese usuario
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)
}
}
}
- Luego use esa ID para consultar CloudKit y recuperar al usuario:
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
}
}
Alternativamente, si sus datos no están en el registro de usuario, entonces querrá hacer una consulta usando CKQueryOperation y predicados: Buen tutorial aquí: https://www.raywenderlich.com/4878052-cloudkit-tutorial-getting-started