2015-10-05 81 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

奇怪的是,應用工作了iOS 8的,這種錯誤出現僅在iOS版9

回答

0

添加下面的代碼行可能會解決你的問題:

queryOperation.qualityOfService = .UserInteractive 

在iOS系統9蘋果改變行爲該設置。特別是在使用蜂窩數據時,您可以獲得您所描述的行爲。

.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 NSOperationQualityOfServiceUserInitiated有很好的體驗,因爲這不會阻塞UI,但仍然很快。 – Red