CloudKit 方法调用挂断
Posted
技术标签:
【中文标题】CloudKit 方法调用挂断【英文标题】:CloudKit method call hung up 【发布时间】:2015-10-05 16:51:20 【问题描述】:当应用启动时,会发生一些初步过程。有的时候很快就搞定了,有的时候没有结束,但是没有任何错误就挂了。
即在启动客户端总是获取最后一个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 中。
【问题讨论】:
【参考方案1】:添加以下代码行可能会解决您的问题:
queryOperation.qualityOfService = .UserInteractive
在 iOS 9 中,Apple 更改了该设置的行为。尤其是在使用蜂窝数据时,您可能会得到您所描述的行为。
.qualityOfService
的文档状态如下:
此属性的默认值为 NSOperationQualityOfServiceBackground,您应该尽可能保留该值。
在我看来,这更像是一个 CloudKit 错误,而不是一个改变的功能。更多的人有同样的问题。我已经在https://bugreport.apple.com 报告了它
【讨论】:
***.com/questions/32493698/…也讨论过类似情况 实际上我对 qos NSOperationQualityOfServiceUserInitiated 有很好的体验,因为这不会阻塞 UI,但仍然很快。以上是关于CloudKit 方法调用挂断的主要内容,如果未能解决你的问题,请参考以下文章
android 自动拨打电话和挂断电话(反射和intent方式)
android 自动拨打电话和挂断电话(反射和intent方式)
CloudKit 操作在开发版本中执行,但有时在生产版本中挂起