2015-10-05 1 views
0

Когда приложение запускает предварительный процесс. Иногда это делается быстро через секунду, а иногда и не заканчивается, но без какой-либо ошибки он повесил трубку.Метод вызова 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.

ответ

0

Добавления следующей строки коды, вероятно, решить вашу проблему:

queryOperation.qualityOfService = .UserInteractive 

В прошивке 9 Apple, изменилась поведение этой установки. Особенно при использовании сотовых данных вы можете получить описанное вами поведение.

В документации указано значение .qualityOfService: По умолчанию это свойство NSOperationQualityOfServiceBackground, и вы должны оставить это значение на месте, когда это возможно.

По-моему, это скорее ошибка CloudKit, чем измененная функция. У большего числа людей такая же проблема. Я уже сообщал об этом в https://bugreport.apple.com

+0

Аналогичную ситуацию также обсуждали по адресу http://stackoverflow.com/questions/32493698/ios-9-cloudkit-query-does-not-return-anything-while-connected-to -cellular-netwo/32494889 # 32494889 –

+1

На самом деле у меня был хороший опыт работы с qos NSOperationQualityOfServiceUserИнтересно, поскольку это не блокирует пользовательский интерфейс, но все же быстро. – Red