亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iCloud基礎知識和代碼示例

iCloud基礎知識和代碼示例

元芳怎么了 2019-11-22 14:23:41
作為一個初學者,我正在為iCloud奮斗。有一些示例,但是它們通常都非常詳細(在開發人員論壇上,有一個針對iCloud和CoreData的示例非常龐大)。在蘋果的文檔都OK,但我仍然無法看到大局。因此,請允許我,其中一些問題是非?;镜模赡芎苋菀谆卮?。上下文:我有一個非常簡單的iCloud應用程序正在運行(下面是完整的示例代碼)。僅向用戶顯示一個UITextView,并且他/她的輸入保存在一個名為text.txt的文件中。在此處輸入圖片說明txt文件被推送到云中,并可供所有設備使用。完美運行,但是:主要問題:不使用iCloud的用戶呢?啟動我的應用程序時(請參見下面的代碼),我會檢查用戶是否啟用了iCloud。如果啟用了iCloud,則一切正常。該應用程序繼續運行,并在云中查找text.txt。如果找到,它將加載它并顯示給用戶。如果在云中找不到text.txt,它將僅創建一個新的text.txt并將其顯示給用戶。如果用戶未啟用iCloud,則不會發生任何事情。如何使非iCloud用戶仍然可以使用我的文本應用程序?還是我只是忽略它們?我是否需要為非iCloud用戶編寫單獨的功能?即我僅從documents文件夾中加載text.txt的函數?蘋果寫道:以與對待應用程序沙箱中所有其他文件相同的方式對待iCloud中的文件。但是,就我而言,再也沒有“普通”應用程序沙箱了。在云中。還是我總是先從磁盤加載我的text.txt,然后再與iCloud檢查是否還有最新信息?相關問題:文件結構-沙箱與云也許我的主要問題是對iCloud應該如何工作的根本誤解。當創建UIDocument的新實例時,我將不得不覆蓋兩個方法。首先- (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError從云-(id)contentsForType:(NSString *)typeName error:(NSError **)outError中獲取文件,然后將文件添加到云中。我是否必須合并單獨的功能,這些功能也會將text.txt的本地副本保存到我的沙箱中?這對非iCloud用戶有效嗎?據我了解,iCloud會自動保存text.txt的本地副本。因此,我不需要將任何內容保存到應用程序的“舊”沙箱中(即,它曾經在iCloud之前的舊年代使用)?,F在,我的沙箱完全是空的,但我不知道這是否正確。我是否應該在其中保留另一個text.txt副本?感覺就像混亂的數據結構...因為云中有一個text.txt,設備上的iCloud沙箱中有一個(即使我處于脫機狀態也可以使用),而舊的沙箱中有第三個我的應用...我的代碼:一個簡單的iCloud示例代碼這大致基于我在開發人員論壇和WWDC會話視頻中找到的示例。我將其剝離到最低限度。我不確定我的MVC結構是否良好。該模型位于AppDelegate中,并不理想。歡迎提出任何改善建議。
查看完整描述

3 回答

?
DIEA

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并移回本地目錄。


因此,這似乎意味著文件/目錄將從本地沙箱中刪除,并移至云中。


查看完整回答
反對 回復 2019-11-22
?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

我一直在使用您的示例,我喜歡它來幫助我掌握iCloud的基礎知識。現在,我正在為您自己的應用程序解決您的問題,該應用程序必須使用本地存儲的內容來支持該應用程序的現有用戶,就我所知,這些內容可能會或可能不會使用iCloud創建這些情況:

情況:

  1. 新的用戶

    • 有icloud-在icloud中創建文檔

    • 沒有icloud-在本地創建文檔

  2. 現有用戶

    • 剛剛刪除-將以前的icloud文檔遷移到本地

    • 不只是刪除-將文檔打開/保存到本地

    • 剛剛添加-將本地文檔遷移到icloud

    • 不只是添加-將文檔打開/保存到icloud

    • 有icloud

    • 沒有icloud

如果有人刪除了iCloud,則對普遍存在的URL的調用不會返回nil嗎?如果是這種情況,我該如何將文檔遷移回本地存儲?我現在將創建一個用戶偏好設置,但似乎有些解決方法。

我覺得我這里缺少明顯的東西,所以如果有人可以看到它,請發出提示。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 735 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號