Ich habe ein bisschen mit der Idee von iCloud zu kämpfen und habe eine allgemeinere Frage gestellt hier . Mein größtes Problem ist, zu entscheiden, ob ich aufhören soll, die Daten des Benutzers in den guten alten Dokumentenordner zu legen, der in der Sandbox der App gefunden wird. Um mein Problem zu veranschaulichen:
Die Docs geben keine Antwort, soweit ich sehen kann. Nehmen wir an, ich habe eine App, die verschiedene TXT-Dateien behandelt. Sobald ich meine App starte, überprüfe ich einfach, ob irgendwelche txt-Dateien in der Cloud sind:
%Vor%Ich habe dann eine Methode, um zu überprüfen, ob es irgendwelche txt-Dateien in der Cloud gibt und wenn ja, laden Sie sie. Wenn nicht, erstelle ich einfach neue txt-Dateien in der Cloud.
Dies bedeutet, dass die App keine Daten im Dokumentenordner speichert. Soweit ich es verstehe, befindet sich alles entweder im lokalen iCloud-Speicher meines Geräts (auf das auch zugegriffen werden kann, wenn der Benutzer OFFLINE ist) oder in der Cloud. Die Textdatei existiert also an zwei Stellen: auf meinem Gerät und in der Cloud.
Es ist also nicht nötig, eine dritte Kopie in meinem lokalen Dokumentenordner zu speichern, oder? Oder ist das aus irgendeinem Grund wichtig, den ich übersehen habe? Mit anderen Worten: Wofür sollte ich den Ordner für lokale Dokumente verwenden, wenn ich iCloud meinen Benutzern anbiete? (Und kann ich einfach diejenigen ignorieren, die sich nicht für iCloud anmelden?)
BEARBEITEN: Nur um zu verdeutlichen, wenn ich über den Ordner für Standarddokumente in der Sandbox der App spreche, meine ich diesen:
%Vor%Es gibt keinen Grund, Dokumente sowohl im lokalen Speicher als auch in iCloud zu speichern. Sie sollten Benutzern jedoch die Möglichkeit geben, den iCloud-Speicher auszuschalten. Wenn der iCloud-Speicher deaktiviert ist, sollten Sie nur nach Dateien im lokalen Speicher suchen (wie bei Apps vor iOS5). Am besten versuchen Sie, den Teil Ihres Codes zu isolieren, der wissen muss, wo Dokumente gespeichert sind, und ob iCloud verfügbar und aktiviert ist und ob der Code die URL zurückgibt, unter der die Dokumente gespeichert werden sollen / p>
Aktualisierung: Wenn Sie für iOS5 vs. iOS4 auseinander gehen wollen, müssen Sie nur testen, ob die iOS5-Funktionen vorhanden sind. Es gibt mehrere Möglichkeiten, dies zu tun. Eine Möglichkeit ist zu überprüfen:
if ([UIDocument class] == nil)
Auf iOS4 ist das wahr und auf iOS5 ist das falsch. Ich weiß nicht, welche Art von Datenstrukturen Sie für Ihre Dateien haben, aber eine Sache, die Sie tun könnten, ist einen Wrapper um UIDocument zu erstellen. Innerhalb dieser Wrapper-Klasse können Sie Instanzvariablen für eine UIDocument-Struktur sowie für Felder, die Sie in IOS4 benötigen (wie den Pfad zu der Datei), haben. Wenn Sie Ihre Klasse instanziieren, testen Sie, ob iCloud aktiviert ist und ob UIDocument verfügbar ist. Falls ja, verwenden Sie sie und legen Sie das Feld fest. Andernfalls setzen Sie die anderen Felder und lassen Sie das Feld UIDocument auf Null. Wenn Sie Operationen für Ihre "Datei" ausführen müssen, testen Sie, ob das UIDocument-Feld Null ist, und ob es "alt" ist. Andernfalls übergeben Sie die Anforderung einfach an das UIDocument-Objekt.
Vielleicht bin ich ein bisschen langsam, indem ich die Dokumente zum vierten oder fünften Mal erneut durchgelesen habe. Ich fand das, was darauf hindeutet, dass Sie Ihre Dateien immer in der Sandbox erstellen und dann in die Cloud verschieben sollten. In gewisser Weise schlägt Apple vor, immer drei Versionen derselben Datei zu haben:
Apps verwenden dieselben Technologien zum Verwalten von Dateien und Verzeichnissen in iCloud, die sie für lokale Dateien und Verzeichnisse verwenden. Dateien und Verzeichnisse in iCloud sind immer noch nur Dateien und Verzeichnisse. Sie können öffne sie, erstelle sie, bewege sie, kopiere sie, lese und schreibe aus ihnen löschen Sie sie oder eine der anderen Operationen, die Sie möglicherweise ausführen möchten machen. Die einzigen Unterschiede zwischen lokalen Dateien und Verzeichnissen und iCloud-Dateien und -Verzeichnisse sind die URL, mit der Sie auf sie zugreifen. Anstelle von URLs, die sich auf die Sandbox Ihrer App beziehen, werden URLs für iCloud verwendet Dateien und Verzeichnisse sind relativ zur entsprechenden iCloud Containerverzeichnis.
Um eine Datei oder ein Verzeichnis nach iCloud zu verschieben:
Erstellen Sie die Datei oder das Verzeichnis lokal in Ihrer App-Sandbox. Während in verwenden, muss die Datei oder das Verzeichnis von einem Datei-Presenter verwaltet werden, z als UIDocument-Objekt.
Verwenden Sie die URLForUbiquityContainerIdentifier: -Methode, um eine URL abzurufen für das iCloud-Containerverzeichnis, in dem Sie die Datei speichern möchten Artikel. Verwenden Sie die Containerverzeichnis-URL, um eine neue URL zu erstellen Gibt den Speicherort des Elements in iCloud an. Ruf den setUbiquitous: itemAtURL: destinationURL: error: Methode des NSFileManager um das Objekt in iCloud zu verschieben. Rufen Sie diese Methode niemals über die App auf Haupt-Bedroung; Das könnte deinen Hauptthread für einen erweiterten Thread blockieren Zeitraum oder verursachen Sie einen Deadlock mit einer Ihrer App eigenen Datei Moderatoren. Wenn Sie eine Datei oder ein Verzeichnis nach iCloud verschieben, wird das System angezeigt kopiert dieses Element aus Ihrer App-Sandbox in ein privates lokales Konto Verzeichnis, damit es vom iCloud-Daemon überwacht werden kann. Sogar Obwohl sich die Datei nicht mehr in Ihrer Sandbox befindet, ist Ihre App immer noch voll Zugang zu ihm. Obwohl eine Kopie der Datei lokal für den aktuellen bleibt Gerät wird die Datei auch an iCloud gesendet, damit sie verteilt werden kann zu anderen Geräten. Der iCloud-Daemon übernimmt die gesamte Erstellung Sicher, dass die lokalen Kopien identisch sind. Also aus der Perspektive von Ihre App, die Datei ist nur in iCloud.
Alle Änderungen, die Sie an einer Datei oder einem Verzeichnis in iCloud vornehmen, müssen vorgenommen werden Verwenden eines Dateikoordinatorobjekts. Diese Änderungen umfassen das Bewegen, Löschen, Kopieren oder Umbenennen des Elements. Der Dateikoordinator sorgt dafür dass der iCloud - Daemon die Datei oder das Verzeichnis am Gleichzeitig stellt er sicher, dass andere interessierte Parteien benachrichtigt werden die Änderungen, die Sie vornehmen.
Beachten Sie, dass, wenn der Benutzer die Gerätesicherung in iCloud aktiviert hat, das Dokumentenverzeichnis trotzdem gesichert wird.
Es hängt wirklich davon ab, ob Sie planen, iCloud als Synchronisierungswerkzeug zwischen Apps / Plattformen zu verwenden. Wenn nicht, ist es nicht sinnvoll, iCloud zum Speichern Ihrer Dokumente zu verwenden.
Tags und Links iphone ios icloud ipad cocoa-touch