Когда приложение запускает предварительный процесс. Иногда это делается быстро через секунду, а иногда и не заканчивается, но без какой-либо ошибки он повесил трубку.Метод вызова CloudKit повесил трубку
I.e. на клиенте запуска всегда извлекают последние serverChangedToken
. и иногда он просто повесил трубку, это не закончилось. Я говорю о производственной среде, разработчик работает хорошо. Так что этот маршрут вызван, но несколько раз он не заканчивается. Любая идея почему? Я не получаю никаких ошибок, тайм-аут.
let fnco = CKFetchNotificationChangesOperation(previousServerChangeToken: nil)
fnco.fetchNotificationChangesCompletionBlock = {newServerChangeToken, error in
if error == nil {
serverChangeToken = newServerChangeToken
dispatch_sync(dispatch_get_main_queue(), {
(colorCodesInUtility.subviews[10]).hidden = false
})
} else {
Utility.writeMessageToLog("error 4559: \(error!.localizedDescription)")
}
dispatch_semaphore_signal(sema)
}
defaultContainer.addOperation(fnco)
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER)
Я знаю, что не рекомендуется использовать семафоры для управления потоком вызовов метода CloudKit.
Считаете ли вы, что последние две строки могут быть заменены? Сначала можно назвать dispatch_semaphore_wait
, а затем addOperation
?
Странно, что приложение работает для прошивки 8, эта ошибка возникает только в прошивке 9.
Аналогичную ситуацию также обсуждали по адресу http://stackoverflow.com/questions/32493698/ios-9-cloudkit-query-does-not-return-anything-while-connected-to -cellular-netwo/32494889 # 32494889 –
На самом деле у меня был хороший опыт работы с qos NSOperationQualityOfServiceUserИнтересно, поскольку это не блокирует пользовательский интерфейс, но все же быстро. – Red