iCloud Favoriten Sync

  • iCloud Favoriten Sync

    Ich habe eine App, welche Core Data verwendet um eine "mitgelieferte" .sqlite (CoreData) Datei zu laden und dann über Tableviews etc. darzustellen. Der Nutzer ist in der lage Inhalte als Favorite zu markieren. Was ich gerne machen würde, ist, diese Lesezeichen zwischen allen Geräten des Nutzern via iCloud zu synchronisieren.
    Da die .sqlite Datei relativ groß ist, halte ich es wenig sinnvoll diese in die Cloud zu legen nur um dann den Marker für "ist Favorite" oder nicht zu ändern. Zumal es bei App Updates in welchen sich der Inhalt ändert auch unpraktisch ist.

    Am einfachsten wäre es wohl sich die ID des Datensatzen und dazu eine BOOL oder int zu merken, die dann besagt ob der jeweilige Datensatz Favorite ist oder nicht. Im Grunde handelt es sich dann dabei um einen Key-Value Store, den man mit NSUbiquitousKeyValueStore in die Cloud bringen könnte, jedoch sagt Apple, dass der NSUbiquitousKeyValueStore nur für Inhalte ist, die nicht regelmäßig / oft geändert werden.

    Ein NSDictionary wäre auch eine Überlegung wert, aber dann muss man sich um die migration kümmern, wenn es auf zwei Geräten geändert wird, dazu müsste man die Einträge evtl mit eine Timestamp versehen?! ... auch nicht so prickelnd für diesen eigentlich doch so einfachen Anwendungsfall.

    Hat jemand vielleicht einen Rat, wie man sowas am besten /einfachsten angeht? Wie würdet ihr soetwas wie Favorites synchronisieren? Eine plist erstellen und als UIDocument syncen?

    Bin dankbar für jeden Rat :)
  • Die einfachste Lösung: direkt den CoreData-Store an iCloud dranhängen (entspr. key bei der Erstellung des NSPersistenStoreCoordinators setzen). Dann einfach eine BOOL property namens favorite und fertig bist Du. Schau Dir mal das WWDC-Session Video "Whats new in CoreData" von 2011 an, da wird so etwas gezeigt. iCloud überträgt auch nicht bei jeder Änderung den kompletten Store sondern erstellt changesets, die dann jeweils gemerged werden. Details verrät Dir die Doku und das Session Video.
  • Danke für deine Antwort!
    Genau so mache ich es bisher (ohne iCloud) ... ein Problem daran wäre z.B.:
    - Jemand hat zwei Geräte, aktualisiert eines davon mit der neuesten Version der App (welche auch etwas im Core Data Model anpasst) und öffnet die App dann auf seinem zweiten Gerät mit älterer App Version.

    Außerdem kann ich, wenn meine Inhalte nicht in der Cloud liegen, viel leichter Updates durchführen, da ich alle Core Data Inhalte einfach mit einer neuen mitgelieferten .sqlite ersetze. Wenn die Favoriten Sachen ausgelagert sind und nur über ein ID manuell an die Einträge geknüpft werden, ist das wesentlich unkomplizierter und nach einem Update müssen auch nicht alle Inhalte in die Cloud geladen werden, was ja auch gar nicht notwendig ist.

    Am einfachfasten wäre eine PLIST die als key die ID enthält und als Value dann eine BOOL. Nur wie lässt sich eine PLIST anständig in die iCloud syncen ... gibt's da irgendwelche Tutorials? Habe bisher nichts gefunden.

    Danke!
  • Aber will man bis zu ca. 600 User defaults haben? Sonst wäre das natürlich eine super einfache Lösung, das ist ja kein Problem zu syncen. Die meisten Nutzer werden natürlich sehr viel weniger haben, aber man muss ja mal vom Maximum ausgehen ...
    Meint ihr das kann man dazu nutzen? :/