2017-01-16 13 views
1

Я пытаюсь реализовать синхронизацию с CloudKit. Чтобы получить изменения с сервера, я использую CKFetchRecordZoneChangesOperation. Однако recordZoneChangeTokensUpdatedBlock не вызывается вообще. Вот код:CloudKit. Блок изменения токена CKFetchRecordZoneChangesOperation не называется

let options = CKFetchRecordZoneChangesOptions() 
options.previousServerChangeToken = changesToken 

let operation = CKFetchRecordZoneChangesOperation(recordZoneIDs: [paletteZoneId], optionsByRecordZoneID: [paletteZoneId:options]) 
operation.fetchAllChanges = true 

operation.recordChangedBlock = {(record) in 
    ... 
} 

operation.recordWithIDWasDeletedBlock = { (recordId,str) in 
    ... 
} 

operation.recordZoneChangeTokensUpdatedBlock = { recordZoneId, token, data in 
    print("new token") 
    self.changesToken = token 
} 


operation.fetchRecordZoneChangesCompletionBlock = { error in 
    ... 
} 

privateDB.add(operation) 

Так как результат операции не работает должным образом. Другие блоки называются ожидаемыми.

В документации говорится, что маркерный блок должен быть вызван для каждой зоны, но он вообще не называется.

Я бы очень признателен за любую помощь.

Большое спасибо.

ответ

2

токен замены сервера возвращается в другом блоке - вам необходимо использовать recordZoneFetchCompletionBlock.

+0

Спасибо @ChrisDeft: Это было полезно, хотя я бы и ожидал, это была другая функция (recordZoneChangeTokensUpdatedBlock INSTEAD OF recordZoneFetchCompletionBlock) – LukeSideWalker