当应用程序启动时,会发生一些初步过程。有时它会在几秒钟内快速完成,有时它不会结束,但没有任何错误它会挂断。
即。在启动客户端总是获取最后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 :(得分:0)
添加以下代码行可能会解决您的问题:
queryOperation.qualityOfService = .UserInteractive
在iOS 9中,Apple改变了该设置的行为。特别是在使用细胞数据时,您可以获得您描述的行为。
.qualityOfService
此文档的文档说明:
此属性的默认值为NSOperationQualityOfServiceBackground,您应尽可能保留该值。
在我看来,这更像是一个CloudKit错误,而不是一个改变过的功能。更多人有同样的问题。我确实已在https://bugreport.apple.com
报告