CKFetchRecordChangesOperation não retorna registros
CKFetchRecordChangesOperation no método simplificado abaixo não retorna nenhum registro. Eu chamo isso de zero, para obter inicialmente todos os registros, mas ele retorna apenas o token do servidor. No entanto, se eu usar o CKQuery, obtenho todos os registros corretamente.
o que estou perdendo?
func fetchChangedRecords(token :CKServerChangeToken?) {
println("\(__FUNCTION__) token: \(token)")
let zoneID = CKRecordZoneID(zoneName: kMyZone, ownerName: CKOwnerDefaultName)
var op = CKFetchRecordChangesOperation(recordZoneID: zoneID, previousServerChangeToken: token)
op.recordChangedBlock = {
record in
println("\(__FUNCTION__) record \(record)")
}
op.recordWithIDWasDeletedBlock = {
recordID in
println("\(__FUNCTION__) record \(recordID)")
}
op.fetchRecordChangesCompletionBlock = {
serverChangeToken, clientChangeToken, error in
println("\(__FUNCTION__) server token \(serverChangeToken), clientChangeToken \(clientChangeToken)")
if let err = error {
println("\(__FUNCTION__) Error: \(err)")
}
if op.moreComing {
println("\(__FUNCTION__) moreComing")
self.fetchChangedRecords(serverChangeToken)
}
}
println("\(__FUNCTION__) op \(op)")
privateDB.addOperation(op)
}
EDITAR:
Portanto, atualizei o código com uma chamada de método adicional com base no valor de moreComing. Abaixo está o que é impresso. Eu também verifiquei se a zona está lá.
moreComing não parece estar definido.
fetchChangedRecords token: nil
fetchChangedRecords op <CKFetchRecordChangesOperation: 0x16dd3e30; operationID=14A302B7-2718-4E05-97C7-B28EC01ED75B>
fetchChangedRecords server token <CKServerChangeToken: 0x16ddfd80; data=AQAAAAAAAAACf/////////+p9bdUdAhLUK36bhza7+4g>, clientChangeToken nil
Apenas para mostrar que a zona está lá.
zone fetching succeeded [<CKRecordZone: 0x16dda330; zoneID=MyZone:__defaultOwner__, capabilities=(Atomic,Sync)>, <CKRecordZone: 0x16d5bb70; zoneID=_defaultZone:__defaultOwner__, capabilities=(none)>]