Buscar..
Observaciones
Tipos soportados
- NSData
- NSDate (Fecha)
- NSNumber (Int / Double)
- Cadena NS (String)
- NSArray (Array)
- CLLocation
- CKReferencia
- CKAsset
Registro de la aplicación para su uso con CloudKit
Lo que necesita es obtener un archivo de derechos para que la aplicación pueda acceder a su iCloud y escribir registros utilizando CloudKit.
Siga los pasos para otorgar acceso a iCloud desde su aplicación:
1- Seleccione el proyecto en el Project Navigator y luego abra la pestaña General.
2- En la sección Identidad, establezca su ID de desarrollador de Apple en el menú desplegable Equipo. (Si no está disponible, agréguelo al menú Xcode -> Preferencias -> Cuentas.
3- Ir a la pestaña Capacidades en las propiedades del proyecto y activar iCloud. Luego, seleccione "Key-Value Storage" y "CloudKit".
4- Asegúrate de que estos artículos estén marcados:
Si todos los elementos están marcados, su aplicación está lista para usar CloudKit.
Utilizando CloudKit Dashboard
Todos los registros creados utilizando el código relacionado con CloudKit se pueden previsualizar, editar e incluso eliminar en CloudKit Dashboard. Para acceder a CloudKit Dashboard, vaya aquí .
Hay varias partes en el tablero de instrumentos:
- Tipos de registro (que se discutirán más adelante)
- Roles de seguridad (que es donde puede establecer bases de datos como públicas o privadas)
- Tipos de suscripción (que su aplicación podría registrar para notificaciones automáticas de Apple (APN) para notificarle cuando se modifica un registro)
Tipos de registro
Aquí, obtiene una lista de todos los tipos de registro existentes en la aplicación. Cuando abre CloudKit Dashboard por primera vez para una aplicación, hay un tipo de registro llamado Usuarios, que puede usar o simplemente borrarlo y usar el suyo propio.
En esta página, puede hacer que sus datos sean escritos manualmente. Por supuesto, en la mayoría de los casos esto no tiene sentido, porque el SDK de iOS puede manejarlo mucho mejor que el panel de control, pero la funcionalidad también está ahí si lo prefiere. El mayor uso de esta página es para previsualizar tipos.
Guardando datos en CloudKit
Para guardar la fecha en CloudKit, debemos hacer:
- A
CKRecordID
(la clave de su registro único) - Un
CKRecord
(que incluye datos)
Haciendo una clave de registro
Para asegurarnos de que cada nuevo identificador de registro sea único, usamos la marca de tiempo actual, que es única. Obtenemos la marca de tiempo usando NSDate
's método timeIntervalSinceReferenceDate()
. Está en la forma de ###. ### (# son números), que utilizaremos la parte entera. Para hacer esto, dividimos la cadena:
Rápido
let timestamp = String(format: "%f", NSDate.timeIntervalSinceReferenceDate())
let timestampParts = timestamp.componentsSeparatedByString(".")
let recordID = CKRecordID(recordName: timestampParts[0])
Haciendo el disco
Para hacer el registro, debemos especificar el tipo de registro (explicado en Uso de CloudKit Dashboard) como Usuarios, el ID como lo que hicimos en este momento y los datos. Aquí, agregaremos un texto de muestra, una imagen y la fecha actual al registro:
Rápido
let record = CKRecord(recordType: "Users", recordID: recordID)
record.setObject("Some Text", forKey: "text")
record.setObject(CKAsset(fileURL: someValidImageURL), forKey: "image")
record.setObject(NSDate(), forKey: "date")
C objetivo
CKRecord *record = [[CKRecord alloc] initWithRecordType: "Users" recordID: recordID];
[record setObject: "Some Text" forKey: "text"];
[record setObject: [CKAsset assetWithFileURL: someValidImageURL] forKey: "image"];
[record setObject: [[NSDate alloc] init] forKey: "date"];
Nota
Aquí, no agregamos el
UIImage
directamente al registro, porque, como se mencionó en Comentarios, el formato de la imagen no se admite directamente en CloudKit, por lo que hemos convertidoUIImage
enCKAsset
.
Accediendo al contenedor
Rápido
let container = CKContainer.defaultContainer()
let database = container.privateCloudDatabase // or container.publicCloudDatabase
Guardando los registros en la base de datos de CloudKit
Rápido
database.saveRecord(record, completionHandler: { (_, error) -> Void in
print(error ?? "")
})