CKRecord get valor para key

Estoy tratando de get valores para un usuario en function de su nombre de usuario. Puedo get el usuario correcto usando:

class func getByUsername(username: String, callback: (records: [CKRecord]) -> ()){ getSummary(NSPnetworkingicate(format: "Username == %@", username)){(records: [CKRecord]) -> Void in callback(records: records) } } class func getSummary(pnetworkingicate: NSPnetworkingicate, callback: (records: [CKRecord]) -> ()){ let query = CKQuery(recordType: "UserInfo", pnetworkingicate: pnetworkingicate) let queryOperation = CKQueryOperation(query: query) queryOperation.desinetworkingKeys = ["ID"] var records = [CKRecord]() queryOperation.recordFetchedBlock = {record in records.append(record)} queryOperation.queryCompletionBlock = {_ in callback(records: records)} CKContainer.defaultContainer().publicCloudDatabase.addOperation(queryOperation) } 

y entonces puedo get el logging correcto llamando al:

 getByUsername("Username"){(records: [CKRecord]) -> Void in var record: CKRecord = records[0] } 

y también puedo get la ID correcta al usar

 var id: String = record.recordID.recordName 

Así que sé que estoy buscando el logging correcto, pero cuando bash get valores del logging, como el correo electrónico del usuario, no se devuelve nil :

 var email: String = record.objectForKey("Email") as String 

También he intentado:

 record.valueForKey("Email") record.valueForKeyPath("Email") 

Cuando record.allKeys() , obtengo un array vacío, [] , y cuando record.allTokens() , obtengo un performance de nil

¿No obtengo correctamente un valor del logging, o tengo que consultar la database para cada valor único que me gustaría get usando la ID de logging? Según lo que dice la documentation :

Un object CKRecord es un dictionary de pares key-valor que utiliza para search y save los datos de su aplicación.

Supongo que no tengo que consultar la database para cada valor que me gustaría get y que los valores se inserten automáticamente en el CKRecord al getlo de iCloud

Cuando salgas de la línea:

 queryOperation.desinetworkingKeys = ["ID"] 

la consulta devolverá todos los campos.

Que no hayas recibido el campo de ID probablemente sea porque es un campo del sistema al que se puede acceder usando

 var ID = record.recordID.recordName