2

我打電話到iCloud的數據庫在我的應用程序兩種不同的方式:CloudKit操作執行的開發版本,但有時在量產版掛

1. 調用CKDatabase方便的方法開發(模擬器)的作品完美,生產(設備)環境:

let privateDatabase = CKContainer.defaultContainer().privateCloudDatabase 

privateDatabase.fetchRecordWithID(recordID, completionHandler: { (record, error) -> Void in 
    // handle record and errors 
}) 

2. 添加CKOperations到主隊列完美的作品在開發環境,以及工作了一段時間,當我在生產環境中測試 - 但隨後隨意,幾個小時後,間歇性測試,對數據庫的這種調用只是開始掛起 - 不會產生錯誤,也不會執行完成代碼。 (該fetchRecordWithID通話仍然運轉完好所有的時間。)

let op1 = CKModifyRecordsOperation(recordsToSave: records, recordIDsToDelete: nil) 
op1.modifyRecordsCompletionBlock = { (savedRecords, deletedRecordIDs, error) -> Void in 
    // handle records and errors 
    } 
op1.database = privateDatabase 

// let op2, op3... 

NSOperationQueue.mainQueue().addOperations([ 
    op1, 
    op2, 
    op3, 
    ], waitUntilFinished: false) 

在CloudKit儀表盤的使用面板,沒有什麼甚至遠程接近極限。我還沒有考慮哪些其他變量 - 或者我可以運行哪些其他測試來弄清楚發生了什麼問題?

+0

嘗試設置op1,op2和op3.qualityOfService = .UserInitiated –

回答

1

嘗試設定OP1,OP2和op3.qualityOfService = .UserInitiated

該設置已經被設置爲一個 '下' 的標準值在IOS 9.

的文檔狀態的qualityOfService:

授予系統資源至 操作的相對重要性。服務級別會影響對象訪問系統資源(例如CPU時間,網絡 資源,磁盤資源等)的優先級。具有更高質量 服務級別的操作被賦予比系統資源更高的優先級,因此他們可以更快地執行其任務。您使用服務級別 以確保響應明確的用戶請求的操作的優先級爲 ,而不是較不重要的工作。該屬性反映了有效執行操作所需的最低服務級別 。該屬性的 默認值爲 NSOperationQualityOfServiceBackground,並且您應該儘可能保留該值 。更改服務級別時,請使用適用於執行相應 任務的最低級別 。例如,如果用戶啓動任務並正在等待 完成,請將值NSOperationQualityOfServiceUserInitiated 分配給此屬性。如果資源可用,系統可以爲操作提供更高的服務級別 。

+0

背景應該保存您的請求,直到設備的無線電啓動爲例。 – malhal

相關問題