CloudKit方法调用挂了

时间:2015-10-05 16:51:21

标签: ios ios9 semaphore cloudkit

当应用程序启动时,会发生一些初步过程。有时它会在几秒钟内快速完成,有时它不会结束,但没有任何错误它会挂断。

即。在启动客户端总是获取最后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 个答案:

答案 0 :(得分:0)

添加以下代码行可能会解决您的问题:

queryOperation.qualityOfService = .UserInteractive

在iOS 9中,Apple改变了该设置的行为。特别是在使用细胞数据时,您可以获得您描述的行为。

.qualityOfService此文档的文档说明: 此属性的默认值为NSOperationQualityOfServiceBackground,您应尽可能保留该值。

在我看来,这更像是一个CloudKit错误,而不是一个改变过的功能。更多人有同样的问题。我确实已在https://bugreport.apple.com

报告