IOS:没有互联网连接时未调用 fetchRecordZoneChangesCompletionBlock

Posted

技术标签:

【中文标题】IOS:没有互联网连接时未调用 fetchRecordZoneChangesCompletionBlock【英文标题】:IOS: fetchRecordZoneChangesCompletionBlock not called when no internet connection 【发布时间】:2017-07-29 20:15:33 【问题描述】:

我在我的应用程序中使用 CloudKit。要从 iCloud 中检索所有更改,我使用操作 CKFetchRecordZoneChangesOperation。当我在没有活动 Internet 连接的情况下添加此操作时,永远不会调用 fetchRecordZoneChangesCompletionBlock。

我确实希望调用此完成块时出现错误 CKError.networkUnavailable。

我正在使用 swift 3。

我可能误解了一些事情。有人可以解释我缺少什么吗?

【问题讨论】:

【参考方案1】:

CKOperation Documentation

CKOperation 对象的默认服务质量级别为 NSQualityOfServiceUtility。此时的操作 级别被认为是任意的,并由系统安排 根据电池电量和其他因素获得最佳时间。在 iPhone,低功耗模式时可暂停任意活动 已启用。

您需要做的是手动将CKFetchRecordZoneChangesOperation的QoS设置为.userInitiated

// userInitiated: Used for performing work that has been explicitly requested by the user,
// and for which results must be immediately presented in order to allow for further user interaction.
// For example, loading an email after a user has selected it in a message list.
//
// set to userInitiated make sure the completion with error will immediately returned if currently no internet connection
zoneOperation.qualityOfService = .userInitiated

【讨论】:

以上是关于IOS:没有互联网连接时未调用 fetchRecordZoneChangesCompletionBlock的主要内容,如果未能解决你的问题,请参考以下文章

客户端加入时未调用事件“连接”

使用 iOS 库时未连接故事板视图

SDCAlertView 回调 clickButtonAtIndex 在 iOS 运行时未被调用

在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath

从 NamedPipeClientStream 调用命名管道时未连接

后台任务运行时未调用 iOS applicationWillEnterForeground 和黑屏