我的应用程序的CloudKit
部分代码存在一个奇怪的问题。我有一个存储在我的应用程序中的CKRecordID
对象列表,最终我需要更新。通常我只需使用CKFetchRecordsOperation
和perRecordCompletionBlock
来获取单个记录,然后相应地处理它们。在正常情况下工作正常。当用户未连接到云或说他们的网络已关闭时,我的问题就出现了。这不是它崩溃或任何事情,它只是根本没有处理错误。我需要正确处理错误的原因之一是,在数据开始刷新之前,我会显示一个加载视图来通知用户更新。然后,当提取完成时,我有一个委托回调来通知原始ViewController
进程完成并删除加载视图。我意识到如果用户没有连接到网络,这可能会导致问题,因此我尝试插入代码以在处理错误时发送回调。问题是,当我从任何网络断开我的测试设备时,它会尝试获取但从不处理错误。这是我正在使用的基本代码:
let recordIDs:[CKRecordID] = //Saved ID's
let fetch = CKFetchRecordsOperation(recordIDs: recordIDs)
fetch.perRecordCompletionBlock = { (record:CKRecord?, recordID:CKRecordID?, error: NSError?) in
if error != nil {
// I've inserted breakpoints here and this never gets
// handled once I turn wifi off, or disable iCloud
dispatch_async(dispatch_get_main_queue()) {
self.customDelegate.errorRefreshingRecords()
}
}
else if let record = record {
// Here I would handle the record should it fetch properly
// this works great when the device is connected to the cloud.
}
}
if let database = self.publicDatabase {
fetch.database = database
fetch.start()
}
有人可以告诉我,我是否在处理错误处理方面有问题吗?当我执行相同的相似概念,但使用fetchRecordWithID
操作时,会处理错误。我不明白为什么这会有所不同。就像我在评论中提到的那样,我已经尝试插入断点,而代码却从未实现过。如果没有与云服务器的某种通信,这perRecordCompletionBlock
根本不起作用吗?
任何帮助都将不胜感激。
谢谢!