CKFetchRecordsOperation perRecordCompletionBlock Not Returning Error

时间:2016-05-24 02:49:10

标签: ios swift cloudkit ckrecord

我的应用程序的CloudKit部分代码存在一个奇怪的问题。我有一个存储在我的应用程序中的CKRecordID对象列表,最终我需要更新。通常我只需使用CKFetchRecordsOperationperRecordCompletionBlock来获取单个记录,然后相应地处理它们。在正常情况下工作正常。当用户未连接到云或说他们的网络已关闭时,我的问题就出现了。这不是它崩溃或任何事情,它只是根本没有处理错误。我需要正确处理错误的原因之一是,在数据开始刷新之前,我会显示一个加载视图来通知用户更新。然后,当提取完成时,我有一个委托回调来通知原始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根本不起作用吗?

任何帮助都将不胜感激。

谢谢!

0 个答案:

没有答案