官方翻譯 | 有關基於文件的iOS應用開發
UIKit框架為應用提供了管理多個文件的能力,通過將每個文件包含的一套資料儲存在本地沙盒或者iCloud上。
支援這一能力的是源於一個叫UIDocument的類,在iOS5.0時引入的。一個機遇文件的應用必須建立一個UIDocument的子類,通過它的資料結構載入文件資料,並且支援讓UIDocument將資料寫進文件檔案中。UIDocument會為你處理很多文件管理相關的細節。除了整合iCloud外,UIDocument還能在後臺讀寫文件資料,這樣使用者在你的應用上進行互動的時候就不會變得反應遲鈍。它同時也能自動和定時儲存資料,這樣使用者就無需很明確地進行儲存的操作。
文件物件是模型控制器
在MVC模式中,文件物件——UIDocument的子類——是模型控制器。一個文件物件管理一個文件相關的資料,特別是一些使用者能看到和編輯的物件。一個文件物件,典型的用法是,被一個為使用者展示文件的VC所管理。
參考連結:Designing a Document-Based Application
當你設計一個應用時,考慮文件資料和其他問題
在你開始編寫程式碼時,你應用考慮下如何設計基於文件的應用。最重要的是,對你的應用來說,什麼是最好的文件資料格式?如何讓這個資料格式在iOS和Mac OS上運作?什麼是最合適的文件型別?
你同時應該計劃下應用的VC和View如何管理開啟文件、提示錯誤、移動到或從iCloud的儲存移動所選檔案的細節。
參考連結:Designing a Document-Based Application, Document-Based Application Preflight
建立UIDocument子類要求實現兩個方法
一個文件物件最重要的角色是溝通一個文件檔案和內部表示文件資料的模型物件之間。它為UIDocument類提供寫進文件檔案的資料,和當文件檔案被讀取時,使用UIDocument提供的資料來初始化這些模型物件。為了實現這些功能,你的UIDocument子類必須重寫 contentsForType:error: 方法和 loadFromContents:ofType:error: 方法。
參考連結:Creating a Custom Document Object
管理文件的生命週期
一個應用應該管理文件的以下生命週期:
- 建立文件
- 開啟和關閉文件
- 監視文件的狀態變化和處理錯誤和版本衝突
- 移動文件到iCloud儲存(或者從iCloud儲存上移除)
- 刪除文件
參考連結:Managing the Life Cycle of a Document
基於使用者的要求將文件存放在iCloud上
應用為使用者提供選擇:將全部文件儲存在iCloud上,或者村部文件存放在本地沙盒中。為了將文件移動到iCloud上,需要建立一個指明文件在iCloud容器目錄中的檔案URL,同時呼叫NSFileManager類的具體方法,將檔案的URL傳給它。從iCloud上移動檔案到本地沙盒遵循類似的方法。
參考連結:Managing the Life Cycle of a Document
確保文件資料能自動儲存
UIDocument每隔一段時間會自用儲存文件資料。使用者不需要明確地進行儲存文件的操作。然而,你的應用需要通過實現撤銷和重做或者跟蹤文件的變更來實現自動儲存功能。
參考連結:Change Tracking and Undo Operations
解決不同文件版本間的衝突
當你的文件儲存在iCloud上時,文件的不同版本可能會出現衝突。當衝突出現時,UIKit會通知應用,這時應用自己必須嘗試解決這些衝突,或者讓使用者在不同版本中選中想保留的版本。
參考連結:Resolving Document Version Conflicts
其他建議
在你開始編寫基於文件的應用時,你應該至少閱讀以下兩篇文章:
Designing a Document-Based Application
Document-Based Application Preflight
這些文章關於如何設計和配置相關問題,能夠為你設計一個良好的文件應用提供整體的認識。
相關文章
- 前端工程基礎知識點–Browserslist (基於官方文件翻譯)前端
- 前端工程基礎知識點--Browserslist (基於官方文件翻譯)前端
- Moya官方文件翻譯
- docker官方文件翻譯3Docker
- docker官方文件翻譯4Docker
- rabbitmq 官方文件翻譯-2MQ
- docker官方文件翻譯5Docker
- docker官方文件翻譯2Docker
- docker官方文件翻譯1Docker
- Core Foundation 官方文件翻譯
- HTTPie 官方文件中文翻譯版HTTP
- BBNorm官方指導文件翻譯ORM
- [翻譯]ElasticSearch官方文件-簡介Elasticsearch
- Redis-py官方文件翻譯Redis
- Akka官方文件翻譯:Cluster Specification
- ReactiveCocoa 4 官方文件翻譯React
- 有關RFC文件的翻譯說明 (轉)
- 基於百度翻譯API開發屬於自己的翻譯工具API
- ExoPlayer的使用與解析(官方文件翻譯)
- [翻譯]ElasticSearch官方文件-資料的修改Elasticsearch
- Matlab最新的官方文件中文翻譯Matlab
- 【翻譯】基於 Cypress 測試 React 應用React
- Python heapq模組官方文件翻譯Python
- 文件翻譯器怎麼用?如何翻譯Word文件?
- [翻譯]關於通用文件轉換器Pandoc
- 別開心太早,Python 官方文件的翻譯差遠了Python
- [翻譯]ElasticSearch官方文件-查詢語言Elasticsearch
- 【Tomcat 6.0官方文件翻譯】—— 簡介Tomcat
- 有ppt文件翻譯軟體嗎?如何翻譯整篇ppt文件
- 實用的Word文件翻譯方法分享,讓Word文件快速翻譯
- PendingIntent 是個啥?官方文件描述的很到位。我給翻譯翻譯Intent
- 關於 iOS 集合官方文件的一份小筆記iOS筆記
- Draft 文件翻譯 - 快速開始 - 基礎APIRaftAPI
- 歡迎參與 KubeVela 官方文件翻譯活動
- kotlinx協程官方文件中文翻譯版本Kotlin
- Kotlin 官方參考文件翻譯完畢Kotlin
- django 1.8 官方文件翻譯: 2-3-2 關聯物件參考Django物件
- 玩轉iOS開發:iOS 11 新特性《基於文件管理的App》iOSAPP