2017-06-17 8 views
1

Ich arbeite an Xcode 8.3 mit iOS 10 und befolgte Apples Cloud Kit Quick Start Dokument für die Verwaltung eines lokalen Cache von Cloud-Daten, und mein Gerät konnte Push-Benachrichtigung erhalten wenn die Daten in einer privaten Datenbank Zone wurden geändert, aber bei dem Versuch, die Zonenänderungen zu holen ich die folgenden Fehler immer erhalten:CloudKit CKError "Ungültige Argumente" mit "Ungültige Synchronisationsfortsetzungsdaten"

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"> 
}> 

Die „Bad Sync Fortsetzung Daten“ sind ziemlich verwirrend, da ich nicht eine Erklärung finden Dieser Fehler in Apples Dokument oder finden Sie einen Verweis in Google-Suche. Ist Ihnen das schon einmal begegnet?

Antwort

1

Nachdem ich in diesem Zusammenhang über die Bedeutung von "Fortsetzung" nachgedacht habe und tiefer in das Apple-Beispiel eindrang, erkannte ich das Problem, dass ich nur eine Variable für Serverwechsel-Token bei verschiedenen Abruf-Änderungsstadien beibehalten habe durch die fetchDatabaseChanges und fetchZoneChanges Methoden. Nach dem Hinzufügen von Variablen zum Verfolgen der Datenbankänderungs-Tokens und Zonenänderungs-Tokens (jede Zone hat ihre eigenen), ist der Fehler "Fehlerhafte Synchronisationsfortsetzungsdaten" verschwunden und ich kann geänderte Datensätze sehen, die vom Server zurückgegeben wurden.

+0

Ich hatte das gleiche Problem. Verstehe ich Sie richtig, dass jede Datenbank (privat, geteilt, öffentlich) ihr eigenes Änderungstoken und jede Zone (Standard, ...) hat? Wenn ich diese Änderungen in dem Beispielcode von Apple angepasst habe, verschwinden die obigen Fehler, jedoch stürzt die Cloud-Deamon ab und ich bekomme diese Art von Fehlermeldungen: '[LogFacilityCK] Hat einen Verbindungsfehler für die Operation B6D7CD06813D5F2E: Fehler Domain = NSCOAErrorDomain Code = 4097" Verbindung zum Dienst namens com.apple.cloudd "UserInfo = {NSDebugDescription = Verbindung zum Dienst namens com.apple.cloudd}' Vielleicht könnten Sie Ihren angepassten Beispielcode teilen? – Daniel

+0

Hallo, @Daniel, ja das ist, was ich von dieser Übung verstehe, dass jede Datenbank und Zone ihre eigenen Tokens hat. Ich sehe diese LogFacilityCK-Fehler nicht, wenn ich nurDatabaseChanges/fetchZoneChanges nach dem Empfang von durch serverseitige Änderungen erzeugten fernen Meldungen erhalte, aber ich habe herumgespielt und sehe diese Fehler, wenn ich proaktiv Änderungen abrufe, bevor ich Benachrichtigungen erhalte, sagen wir, wenn ich abholen will Änderungen am Start der App. Ist das auch in deinem Code passiert? Wenn dies der Fall ist, kann es sein, dass das Abrufen von Änderungen ohne neue Änderungen auf dem Server zu einem cloudKit-Seitenfehler führen kann. – CodePlumber

+0

Um zu bestätigen, dass dieser Fehler durch das Abrufen ohne serverseitige Änderungen verursacht wird, habe ich versucht, meine App in den Hintergrund zu stellen, dann einige Änderungen auf der Serverseite vorzunehmen und dann die App zu aktivieren, die einen fetchChanges-Aufruf auslösen würde. In diesem Fall hat die App die Änderungen erfolgreich ohne Fehler abgerufen. Wenn Sie diese Übung erneut ausführen, ohne eine serverseitige Änderung vorzunehmen, wird der 4097-Fehler erneut angezeigt. – CodePlumber