我正在寻求有关如何因给定超时设置取消 cloudKit 操作的帮助?我的案例是我使用 CKModifyRecordsOperation 将一些更改上传到 iCloud,如果失败,我会将那些失败的记录保存到本地存储。但是有一点,手术要花这么长时间……
因此,我想为该操作设置一个大约 60 秒的超时时间,如果超时,我将取消该操作。现在我只使用 sleep func,虽然这不在主线程中,但它使每个添加的操作至少运行 60 秒。我知道这不是正确的解决方案。我的代码如下:
let uploadOperation = CKModifyRecordsOperation(recordsToSave: recordsToSave, recordIDsToDelete: recordIDsToDelete)
uploadOperation.modifyRecordsCompletionBlock = { (savedRecords, deletedRecordIDs, error) in
if let error = error {
...
CloudKitManager.persistentFailedRecords(saveFailed, deleteFailed)
}
}
CloudKitManager.privateDB.add(uploadOperation)
sleep(60)
if uploadOperation.isExecuting {
uploadOperation.cancel()
}
我搜索了一些关于操作超时的内容,答案主要集中在 NSURLSession 上,没有关于 CloudKit 操作的答案。我尝试使用它自己的属性“timeoutIntervalForRequest”,但它不起作用。
任何帮助将不胜感激!谢谢!
最佳答案
你设置对了吗?:
let operationConfiguration = CKOperation.Configuration()
operationConfiguration.timeoutIntervalForRequest = 60
operationConfiguration.timeoutIntervalForResource = 60
let fetchRecordZoneChangesOperation = CKFetchRecordZoneChangesOperation()
fetchRecordZoneChangesOperation.configuration = self.operationConfiguration
// etc...
关于swift - 由于 Swift 超时,如何取消 cloudKit 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40259370/