Если CKQueryOperation
возвращает ошибку RequestRateLimited
, должен ли тот же queryOperation добавлен в publicDatabase или должен быть создан новый запрос на основе полученного курсора? Находит ли клиент курсор, если произошла ошибка RequestRateLimited
?RequestRateLimited в CKQueryOperation
@farktronix:
- вы не должны получить новый курсор запроса
- можно повторить ту же операцию снова
я реализовал его хорошо, потому что я получаю ошибка (в симуляторе, в условиях плохого интернета)
- [NSOperationQueue addOperation]: операция завершена, и не может быть помещён
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
// ..other things
let qo = CKQueryOperation(query: query)
let qcb: (CKQueryCursor!, NSError!) ->() = {cursor, error in
if error == nil {
//.. some code
} else {
if error.code == CKErrorCode.RequestRateLimited.rawValue {
let retryAfter = error.userInfo![CKErrorRetryAfterKey] as! NSNumber
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(retryAfter.doubleValue * Double(NSEC_PER_SEC))), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
publicDatabase.addOperation(qo) // <- HERE is it ok? I get an error
})
} else {
// .. some other code
}
}
}
qo.queryCompletionBlock = qcb
publicDatabase.addOperation(qo)
// .. other things ..
})
Я получаю сообщение об ошибке, когда получил ответ «RequestRateLimited», я добавил соответствующий код в вопрос, вы сказали, что мне не нужно создавать новый запрос, но теперь я смущен –
Поскольку «NSOperation» может быть запущен только один раз вам нужно создать новый экземпляр операции со всеми теми же свойствами. Вы можете использовать тот же 'CKQuery' для новой операции. – farktronix