2012-04-11 13 views
0

Ich habe eine funktionierende Implementierung von iCloud. Jetzt möchte ich die Konfliktbehandlung verbessern, indem ich einige Merge-Funktionen hinzufüge. Ich habe versucht, einen konsistenten Weg zu finden, um einen Konflikt zu Testzwecken zu erzwingen, aber ich hatte bisher kein Glück, Konflikte treten nicht konsequent auf, wenn ich sie erwarte. Dies könnte darauf hindeuten, dass ich etwas falsch mache, oder vielleicht, dass ich etwas über die Funktionsweise von iCloud missverstanden habe (noch etwas anderes, meine ich).Wie erzwinge ich einen Versionskonflikt in iCloud

Ich benutze UIDocument und ja, ich höre die UIDocumentStateChangedNotification. Tatsächlich bekomme ich gelegentlich gelegentliche Konfliktmitteilungen. Außerdem habe ich nur eine Datei in iCloud.

Mit zwei Geräten des gleichen iCloud accout verwenden, hier ist der Fluss der Ereignisse, die ich erwartet hatte immer einen Konflikt verursachen:

  • öffnen Sie die Datei auf beiden Geräten (beide Geräte werden nun korrekt den gleichen Inhalt zu sehen). Hinweis: Hier ist die einzige Zeit, die openWithCompletionHandler aufgerufen wird, danach wird es nie wieder aufgerufen.
  • Nehmen Sie einige Änderungen an Gerät A vor und rufen Sie saveToURL auf.
  • Warten Sie einige Zeit, damit sich die Änderung ausbreiten kann.
  • Nehmen Sie weitere Änderungen an Gerät B vor und rufen Sie saveToURL auf.
  • Warten Sie einige Zeit, damit sich die Änderung ausbreiten kann.
  • ERWARTET: Die App sollte eine Konfliktbenachrichtigung von iCloud erhalten. BEOBACHTET: Ein Konflikt tritt sehr gelegentlich auf, aber die meiste Zeit geschieht einfach, dass das UIDocument sein UIDocumentStateEditingDisabled-Flag gesetzt und nach etwa einer halben Sekunde wieder gelöscht wird (ich nehme an, die Bearbeitung wird während der iCloud deaktiviert) Daemon zieht die Version vom anderen Gerät und speichert sie im lokalen allgegenwärtigen Verzeichnis.

ähnlich wie ein Versionskontrollsystem wie SVN, ich die Version von Gerät B erwarte einen Konflikt zu verursachen, da ein „update“ notwendig ist, um durch die Vorrichtung A.

Am die Version hochgeladen zu bekommen Ich rechne falsch mit einem Konflikt in dem Szenario, das ich gerade beschrieben habe? Warum? Gibt es einen anderen Weg, um einen Konflikt konsequent zu erzwingen?

Danke!

Antwort

4

ich einen besseren Weg hätte gedacht, um einen Konflikt verursachen würde sein:

  • Sicherstellen, dass beide Geräte verfügen über eine up-to-date Kopie der Daten
  • Legen Sie beide Geräte in den Flugmodus zu Alle mögliche iCloud-Updates auf beiden Geräten
  • ändern der Daten an der gleichen Stelle verhindern, die jeweils mit unterschiedlichen neuen Daten
  • das Netzwerk auf
  • Warten Kehre um, damit die Änderungen
  • 01 propagieren

From the docs:

Konflikte auftreten, wenn zwei Instanzen einer Anwendung, um eine Datei lokal ändern und beide Änderungen werden dann auf iCloud übertragen.Dies kann zum Beispiel passieren, wenn die Änderungen vorgenommen werden, während sich das Gerät im Flugmodus befindet, und Änderungen nicht sofort an iCloud übertragen werden können. Wenn dies der Fall ist, speichert iCloud beide Versionen der Datei und benachrichtigt die Datei-Presenter der Apps darüber, dass ein Konflikt aufgetreten ist und gelöst werden muss.

Die Art und Weise Sie es tun (Zeit für die Synchronisation ermöglicht, die Dokumente zu verändern unterschiedlich) scheint, wie es sollte nicht Ursache einen Konflikt.

0

iCloud funktioniert grundsätzlich wie Versionskontrollsystem - nur dass Sie nur auf die Konfliktversionen zugreifen können (wenn ein Konflikt auftritt).

Wenn ein Gerät ver_1 von iCloud abgerufen, bearbeitet, gespeichert und gefunden hat, dass der Server eine andere Version (ver_2 oder höher) als erwartet hat, wird eine konfliktbehaftete Version erstellt.

Nach der ersten Synchronisierung können Sie:

  1. Abschaltzeit Wi-Fi auf dem Gerät B, bearbeiten & speichern.
  2. bearbeiten auf Gerät A, speichern.
  3. wiederum auf Wi-Fi auf dem Gerät B.

Ein Konflikt wird bald kommen.

Verwandte Themen