Speichern Sie iOS 8 Dokumente auf iCloud Drive

8

Ich möchte, dass meine App die erstellten Dokumente in iCloud Drive speichert, aber es fällt mir schwer, dem zu folgen, was Apple geschrieben hat. Hier ist, was ich bisher habe, aber ich bin mir nicht sicher, wohin ich von hier aus gehen soll.

UPDATE2

Ich habe Folgendes in meinem Code, um ein Dokument manuell in iCloud Drive zu speichern:

%Vor%

Ich habe die Berechtigungen für die App-ID und in Xcode selbst eingerichtet. Ich klicke auf die Schaltfläche, um sie auf iCloud Drive zu speichern, und es werden keine Fehler angezeigt. Die App stürzt nicht ab, aber auf meinem Mac in iCloud Drive wird nichts angezeigt. Die App läuft auf meinem iPhone 6 Plus über Test Flight mit iOS 8.1.1.

Wenn ich es mit Simulator starte (ich weiß, dass es nicht funktioniert, weil iCloud Drive nicht mit dem Simulator funktioniert), bekomme ich den Absturzfehler: 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[3]'

    
user717452 20.11.2014, 23:15
quelle

2 Antworten

30

Nun, Sie haben mich selbst für diese Angelegenheit interessiert und als Ergebnis habe ich viel zu viel Zeit mit dieser Frage verbracht, aber jetzt, wo ich es funktioniert habe, hoffe ich, dass es Ihnen auch hilft!

Um zu sehen, was tatsächlich im Hintergrund passiert, können Sie sich ~/Library/Mobile Documents/ ansehen, da dies der Ordner ist, in dem die Dateien letztendlich angezeigt werden. Ein weiteres sehr cooles Dienstprogramm ist brctl , um zu überwachen, was nach dem Speichern einer Datei in der iCloud auf Ihrem Mac passiert. Führen Sie brctl log --wait --shorten aus einem Terminalfenster aus, um das Protokoll zu starten.

Nach der Aktivierung der iCloud-Fähigkeit (mit ausgewählten iCloud-Dokumenten) sollten Sie zunächst Informationen zum iCloud Drive-Support bereitstellen ( Aktivieren der iCloud Drive-Unterstützung ). Ich musste auch meine Bundle-Version stoßen, bevor ich die App erneut ausführen konnte. Ich habe mir etwas Zeit genommen, um das herauszufinden. Fügen Sie Folgendes zu Ihrem info.plist :

hinzu %Vor%

Als nächstes, der Code:

%Vor%

Ich habe eine Datei namens demo.pdf im Ordner "Documents" gespeichert, die ich "hochlade".

Ich werde einige Teile hervorheben:

URLForUbiquityContainerIdentifier: stellt das Stammverzeichnis zum Speichern von Dateien bereit. Wenn Sie sie in Ihrem iCloud-Laufwerk auf Ihrem Mac anzeigen möchten, müssen Sie sie im Ordner "Dokumente" speichern. Daher fügen wir diesen Ordner zum Stammverzeichnis hinzu :

%Vor%

Sie müssen auch den Dateinamen der URL hinzufügen, hier kopiere ich den Dateinamen von der localURL (das ist demo.pdf):

%Vor%

Und das ist es im Grunde ...

Sehen Sie sich als Bonus an, wie Sie einen NSError -Zeiger bereitstellen können, um potenzielle Fehlerinformationen zu erhalten:

%Vor%     
fguchelaar 08.12.2014, 12:47
quelle
1

Wenn Sie mit UIDocument und iCloud arbeiten möchten, ist dieses Handbuch von Apple ziemlich gut: Ссылка

BEARBEITET : Ich kenne keine bessere Anleitung von Hand, damit dies helfen kann:

Sie müssen UbiquityURL mit der Funktion URLForUbuiquityContainerIdentifier für NSFileManager (die asynchron ausgeführt werden soll) abrufen. Sobald dies erledigt ist, können Sie Code wie den folgenden verwenden, um Ihr Dokument zu erstellen.

%Vor%

Sie sollten auch prüfen, ob NSMetadataQuery Dokumente verwendet, die von anderen Geräten hochgeladen wurden, und diese möglicherweise zum Download in die Warteschlange stellen. Beobachten Sie NSPersistentStoreDidImportUbiquitousContentChangesNotification , um unter anderem Änderungen über iCloud zu finden.

** Bearbeiten 2 **

Sieht so aus, als ob Sie versuchen, eine PDF-Datei zu speichern, die Apple nicht als "Dokument" im Sinne von iCloud-Synchronisierung betrachtet. Sie müssen UIManagedDocument nicht verwenden. Entfernen Sie die letzten 3 Zeilen Ihres Completion-Handlers und verwenden Sie stattdessen einfach NSFileManager setUbiquitous:itemAtURL:destinationURL:error: -Funktion. Die erste URL sollte ein lokaler Pfad zur PDF sein. Die zweite URL sollte der Pfad sein, in dem der Ubiquiuty-Container gespeichert wird.

Sie müssen vielleicht auch in NSFileCoordinator schauen. Ich denke, dieser Leitfaden von Apple könnte der relevanteste sein: Ссылка

    
zeroimpl 21.11.2014 02:52
quelle

Tags und Links