icloud文檔存儲程式設計相對鍵值資料存儲而言比較複雜,涉及到自定義文檔類、獲得icloud文檔目錄、查找ubiquity容器中的文檔、儲存文檔和解決文檔沖突等内容。
執行個體:icloud文檔存儲程式設計設計
執行個體介紹一下icloud文檔存儲程式設計過程,畫面中有一個文本框和一個按鈕控件,在裝置1輸入内容,點選“儲存資料”按鈕,将資料儲存icloud伺服器。右圖是裝置2畫面,過幾秒鐘後裝置2上會讀取icloud伺服器端資料,并顯示在文本框中。
配置xcode工程
編寫icloud文檔存儲編應用程式也需要在xcode工程中進行一些配置,選擇tagets→mynotes→summary→entitlements
在圖中ubiquity contrainers添加com.51work6.mynotes,這是ubiquity容器辨別,可以有多個ubiquity容器辨別,這個容器辨別代表着不同的目錄。com.51work6.mynotes代表目錄如下所示:
/var/mobile/library/mobile documents/98z3r5xu29~com~51work6~mynotes/
其中的98z3r5xu29是在ios開發者配置門戶網站建立app id時候生成的,它被稱為team id。
如果應用中沒有使用icloud鍵值資料存儲key-value store可以不用配置。
自定義文檔類
我們需要自己封裝一個文檔類,它繼承抽象類uidocument,而uidocument實作nsfilepresenter協定。實作nsfilepresenter協定的類,它所代表的檔案和目錄可以被檢視和編輯,這些nsfilepresenter實作類與檔案協調者類nsfilecoordinator結合使用,可以協調管理檔案或目錄。
這個類我們命名為myclouddocument, myclouddocument的代碼如下:
獲得icloud文檔目錄
icloud文檔目錄是指在ubiquity容器下的document目錄,是以獲得了ubiquity容器的根目錄,就可以獲得的icloud文檔目錄了。
viewcontroller.m中的 ubiquitousdocumentsurl方法可以icloud文檔目錄:
查找ubiquity容器中的文檔
獲得icloud文檔目錄後,我們需要找到容器中的檔案。查詢容器中的檔案需要注冊兩個廣播通知:
nsmetadataquerydidfinishgatheringnotification 查詢結束發出通知;
nsmetadataquerydidupdatenotification 查詢結束,進入開始更新階段發出的通知;
viewcontroller.m中注冊和解除通知代碼如下:
儲存文檔
儲存文檔很簡單,它是在viewcontroller.m中的 saveclick:方法處理的,saveclick:方法是點選按鈕時候觸發:
儲存成功之後我們可以在其它裝置上看看是否icloud中已經有abc.txt文檔了。如果使用mac os x系統電腦,我們可以在“系統偏好設定”中打開icloud對話框,點選“管理”按鈕可以打開icloud空間管理對話框,其中的mynotes是我應用名,右邊的abc.txt建立的檔案。
如果在iphone、ipod touch和ipad等ios裝置中檢視,可以啟動設定應用程式,也進入到存儲空間管理中,我的ipod touch中檢視的情況。