3 回答

TA貢獻1820條經驗 獲得超2個贊
我只是重新閱讀了文檔,看來我的一般方法是錯誤的。我應該首先在沙箱中創建文件,然后將其移動到云中。換句話說,Apple似乎建議我始終保持同一個文件的三個版本:一個位于我的應用程序目錄中,一個位于設備的iCloud demon目錄中(如果脫機也可以訪問),另一個云端:
應用程序使用與本地文件和目錄相同的技術來管理iCloud中的文件和目錄。iCloud中的文件和目錄仍然只是文件和目錄。您可以打開它們,創建它們,移動它們,復制它們,對其進行讀寫,刪除它們或您可能想要執行的任何其他操作。本地文件和目錄與iCloud文件和目錄之間的唯一區別是用于訪問它們的URL。iCloud文件和目錄的URL相對于相應的iCloud容器目錄,而不是相對于應用程序沙箱的URL。
要將文件或目錄移動到iCloud:
在應用程序沙箱中本地創建文件或目錄。在使用時,文件或目錄必須由文件演示者(例如UIDocument對象)管理。
使用URLForUbiquityContainerIdentifier:方法檢索要在其中存儲該項目的iCloud容器目錄的URL。使用容器目錄URL構建新的URL,該URL指定該項目在iCloud中的位置。調用NSFileManager的setUbiquitous:itemAtURL:destinationURL:error:方法將項目移動到iCloud。永遠不要從應用程序的主線程調用此方法;這樣做可能會長時間阻塞主線程,或者導致應用程序自己的文件提交者之一陷入僵局。當您將文件或目錄移動到iCloud時,系統會將該項從應用程序沙箱中復制到私有本地目錄中,以便可以由iCloud守護程序進行監視。即使該文件不再位于沙箱中,您的應用仍然可以完全訪問它。盡管該文件的副本仍保留在當前設備的本地,但該文件也將發送到iCloud,以便可以將其分發到其他設備。iCloud守護程序處理確保本地副本相同的所有工作。因此,從您的應用程序角度來看,文件僅位于iCloud中。
您必須使用文件協調器對象對iCloud中的文件或目錄進行所有更改。這些更改包括移動,刪除,復制或重命名項目。文件協調器確保iCloud守護程序不會同時更改文件或目錄,并確保將您所做的更改通知其他相關方。
但是,如果您深入研究有關setUbiquitous的文檔,則會發現:
使用此方法將文件從當前位置移動到iCloud。對于位于應用程序沙箱中的文件,這涉及從沙箱目錄中物理刪除文件。(系統擴展了應用程序的沙箱特權,使其可以訪問移動到iCloud的文件。)您還可以使用此方法將文件移出iCloud并移回本地目錄。
因此,這似乎意味著文件/目錄將從本地沙箱中刪除,并移至云中。

TA貢獻1863條經驗 獲得超2個贊
我一直在使用您的示例,我喜歡它來幫助我掌握iCloud的基礎知識。現在,我正在為您自己的應用程序解決您的問題,該應用程序必須使用本地存儲的內容來支持該應用程序的現有用戶,就我所知,這些內容可能會或可能不會使用iCloud創建這些情況:
情況:
新的用戶
有icloud-在icloud中創建文檔
沒有icloud-在本地創建文檔
現有用戶
剛剛刪除-將以前的icloud文檔遷移到本地
不只是刪除-將文檔打開/保存到本地
剛剛添加-將本地文檔遷移到icloud
不只是添加-將文檔打開/保存到icloud
有icloud
沒有icloud
如果有人刪除了iCloud,則對普遍存在的URL的調用不會返回nil嗎?如果是這種情況,我該如何將文檔遷移回本地存儲?我現在將創建一個用戶偏好設置,但似乎有些解決方法。
我覺得我這里缺少明顯的東西,所以如果有人可以看到它,請發出提示。
- 3 回答
- 0 關注
- 735 瀏覽
添加回答
舉報