官方翻譯 | 有關基於文件的iOS應用開發

b10l07發表於2019-02-01

UIKit框架為應用提供了管理多個文件的能力,通過將每個文件包含的一套資料儲存在本地沙盒或者iCloud上。


3079374-bfc90fa0c46959a9.png
來自蘋果官網

支援這一能力的是源於一個叫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
這些文章關於如何設計和配置相關問題,能夠為你設計一個良好的文件應用提供整體的認識。

原文連結:About Document-Based Applications in iOS

相關文章