2017-06-17 60 views
1

我的工作的Xcode 8.3與iOS 10,我跟着蘋果的Cloud Kit Quick Start文檔維護雲數據的本地緩存,和我的設備能夠接收推送通知當在一個專用數據庫區中的數據被改變,而是試圖獲取該區域的變化,我總是得到以下錯誤時:CloudKit CKError「無效參數」與「壞同步延續數據」

2017-06-17 11:58:11.376807-0400 MyApp[10694:5029263] received remote notification 
2017-06-17 11:58:11.897402-0400 MyApp[10694:5031532] fetch database change completed 
2017-06-17 11:58:11.897606-0400 MyApp[10694:5031532] zone deletions 
2017-06-17 11:58:12.320908-0400 MyApp[10694:5031561] record zone fetch completed 
Error fetching zone changes for private database: <CKError 0x170256620: "Invalid Arguments" (12/2006); server message = "Bad sync continuation data"; uuid = xxxxxxxx-EFD7-459D-xxxx-xxxxxxxxxxx; container ID = "iCloud.com.mycompany.MyApp"> 
2017-06-17 11:58:12.332247-0400 MyApp[10694:5031561] fetch record zone changes completed 
Error fetching zone changes for private database: <CKError 0x174640150: "Partial Failure" (2/1011); "Couldn't fetch some items when fetching changes"; uuid = xxxxxxxx-EFD7-459D-xxxx-xxxxxxxxxxx; container ID = "iCloud.com.mycompany.MyApp"; partial errors: { 
PrivateZone:__defaultOwner__ = <CKError 0x170254670: "Invalid Arguments" (12/2006); server message = "Bad sync continuation data"> 
}> 

「壞同步延續數據」還是比較混亂的,因爲我無法找到的解釋這個錯誤在Apple的文檔中或在谷歌搜索中找到任何參考。有沒有人遇到過這個?

回答

1

在深入思考這個上下文中的「continuation」的含義並深入研究Apple示例之後,我意識到問題在於我只保留了一個變量,用於在不同的獲取更改階段返回的服務器更改標記由fetchDatabaseChangesfetchZoneChanges方法。在添加變量以跟蹤數據庫更改令牌和區域更改令牌(每個區域都有自己的)後,「錯誤同步連續數據」錯誤消失,我可以看到服務器返回的更改記錄。

+0

我有同樣的問題。我是否正確理解每個數據庫(私有,共享,公共)都有自己的更改令牌和每個區域(默認,...)?當我在Apple的示例代碼中修改這些更改時,上述錯誤消失了,但是雲deamon崩潰了,並且我得到了這些類型的錯誤消息:'[LogFacilityCK]運行B6D7CD06813D5F2E出現連接錯誤:錯誤域= NSCocoaErrorDomain代碼= 4097「連接到名爲com.apple.cloudd的服務「UserInfo = {NSDebugDescription =連接到名爲com.apple.cloudd的服務}'也許你可以分享你修改過的示例代碼? – Daniel

+0

嗨,@丹尼爾,是的,這是我從這個練習中瞭解到的,每個數據庫和區域都有自己的變更令牌。如果我在接收到由服務器端更改生成的遠程通知後只提取數據庫更改/ fetchZoneChanges,但我沒有看到這些LogFacilityCK錯誤,但是我玩過並且如果在收到任何通知之前主動提取更改,我會看到這些錯誤,並說我想要獲取在應用程序開始時進行更改。這也是你的代碼中發生了什麼?如果是這樣,我想可能是在服務器上沒有任何新更改的情況下提取更改可能會導致一些cloudKit端錯誤。 – CodePlumber

+0

爲了確認此錯誤是由於在服務器端沒有任何更改而導致的,我嘗試將我的應用放入後臺,然後在服務器端進行一些更改,然後喚醒應用,從而觸發fetchChanges調用。在這種情況下,應用程序成功獲取更改沒有任何錯誤。再次執行此練習而不進行任何服務器端更改會再次導致4097錯誤。 – CodePlumber