我基本上在搞乱CloudKit。我有2个问题,我希望得到一些帮助/教育。
(1)当我尝试在模拟器中运行以下代码时,WiFi已关闭(为了模拟网络不可用),我希望它会引发网络不可用错误。但是,cloudKit不会抛出任何错误,函数也不会执行任何操作,即不执行modifyRecordZonesCompletionBlock中的任何一个print语句
self.container = CKContainer.default()
self.privateDB = self.container.privateCloudDatabase
let createZoneGroup = DispatchGroup()
createZoneGroup.enter()
let createZoneOperation = CKModifyRecordZonesOperation(recordZonesToSave: [customZone], recordZoneIDsToDelete: [])
createZoneOperation.modifyRecordZonesCompletionBlock = { (saved, deleted, error) in
if let theerror = error {
// Need to handle error
print("Create Custom zone error \(theerror)")
} else {
print("Custom Zone created")
}
createZoneGroup.leave()
}
createZoneOperation.qualityOfService = .background
self.privateDB.add(createZoneOperation)
但是,当我将createZoneOperation.qualityOfService
更改为default
或userInitiated
时,它会抛出一个错误(下面),这是预期的行为。为什么是这样?它只是一个模拟器异常还是抛出与运行服务质量相关的云套件错误,为什么?我无法在cloudkit API参考中找到此行为的任何信息。
Create Custom zone error <CKError 0x60800005a2e0: "Partial Failure" (2/1011); "Failed to modify some record zones"; partial errors: {
Main:__defaultOwner__ = <CKError 0x610000242910: "Network Unavailable" (3/NSURLErrorDomain:-1009); "The Internet connection appears to be offline.">
}>
(2)此外,我预计它会引发一个Network Unavailable
错误而不是Partial Failure
失败错误,其中包含Network Unavailable
错误。这是预期的行为吗?是否总是抛出Partial Failure
错误,然后必须解包才能找到包含的错误消息?文档看起来非常缺乏任何解释,除非我没有找到正确的位置。
非常感谢任何帮助。谢谢。
答案 0 :(得分:2)
我尝试回答这两个问题......
没有模拟器错误或问题,您没有收到错误连接,因为.background服务质量意味着...
系统比用户更快地执行用户启动的工作 可以推迟到最佳时间的工作。
也许这就是您没有收到错误的原因,因为系统正在等待更好的网络状况,而您设置.default或.userInitiate系统需要&和#34;实时&#34;响应。
来自Energy Efficiency Guide for iOS Apps
的引用要模拟网络状况,请更好地使用Apple的网络链接调节器工具。 Here you could find more info关于它。
我不确定,但我认为Partial Failure是所有CKxxxxxOperation错误结果的常见包装。
它有意义,因为这些操作涉及1..N CKRecords,其中一些可以完成,其他人可以完成错误