Пожалуйста, прочитайте сообщение об ошибке.
В нем говорится, что в cloudkitHelper
нет селектора getData
, что соответствует действительности.Назовите его CloudkitHelper
в соответствии с соглашениями об именах и укажите, что вы вызываете метод class .
getData
принадлежит ViewController
и (цель) self
представляет класс CloudkitHelper
.
Измените строки Timer
на
Timer.scheduledTimer(timeInterval: retryInterval!, target: viewController, selector: #selector(getData), userInfo: nil, repeats: false)
Вместо подкласса ViewController
extension
, а метод экземпляра более разумен,Я удалил лишний код и использовал блочный Timer
API
extension ViewController {
func request( error:Error) {
if let ckerror = error as? CKError {
switch ckerror.code {
case .requestRateLimited, .zoneBusy, .limitExceeded:
let retryInterval = ckerror.userInfo[CKErrorRetryAfterKey] as! TimeInterval
Timer.scheduledTimer(withTimeInterval: retryInterval, repeats: false) { _ in
DispatchQueue.main.async {
self.getData()
}
}
default: break
}
}
}
}