2015-12-12 25 views
5

我使用CKModifyRecordsOperation來保存一組記錄,如果我有互聯網連接都可以正常工作,並且正在調用完成塊。但是,當我沒有連接完成塊沒有被調用,我沒有得到任何信息,我的操作失敗。CKModifyRecordsOperation modifyRecordsCompletionBlock不被稱爲

我用下面的代碼完成塊

modifyOperations.modifyRecordsCompletionBlock = ^(NSArray *savedRecords, NSArray *deletedRecordIDs, NSError *error) 
{ 
    if(error){ 
     NSLog(@"Error: %@", error.localizedDescription); 
    } 

    item.creatorRecordId = record.recordID; 
}; 

,然後我用

[self.publicDB addOperation:modifyOperations]; 

任何想法如何,我可以得到的信息進行操作,如果操作失敗,例如在沒有互聯網連接的情況下?

+1

我最近一直在處理這個問題。如果沒有互聯網,操作不會失敗。它只是等待。當您的Internet連接返回時,操作將完成。一個選項(我實現的)是在將操作添加到數據庫之前進行可達性檢查。 – rmaddy

+0

是的,我也一直在想它。但是,如果在檢查可達性並執行操作之前連接丟失,則此解決方案可能存在問題...我一直在考慮實現計時器,然後在一段時間後檢查可達性(如果操作未觸發)。但是,現在又有一個問題應該是什麼。 – Wojtek

回答

6

默認情況下,CloudKit操作的qualityOfService屬性設置爲NSQualityOfServiceUtility

使用NSQualityOfServiceUtilityNSQualityOfServiceBackground的操作可能會標記爲使用discretionary network requests。如果網絡連接性差,系統可以保留任意網絡請求,所以在條件改善並且系統發送請求之前,您可能不會收到服務器的響應。

如果您希望立即在所有情況下發送您的請求,請將CKOperation.qualityOfService設置爲NSQualityOfServiceUserInitiatedNSQualityOfServiceUserInteractive