天天看點

文檔管理app端需求實作方案關鍵點記錄

實作的需求包括:文檔清單、下載下傳清單(包含删除功能)、文檔詳情、預覽和搜尋,若無法在app内打開則需要提供在其他app打開的能力。

簡單來說,文檔下載下傳和管理的實作在技術上沒有多大難度,但這裡的方案實作了以下幾點:

1. 基于nsurlsession的背景下載下傳,并在任務被系統中斷後的恢複(比如app被手動kill, 這種情況下本方案采取的政策是自動恢複下載下傳)

2. 在其他app中打開,通過UIDocumentInteractionController實作相應的功能;并且由于該類沒有提供一個直接判斷的方法(必須要嘗試打開時才可以得到是否能夠打開),這裡的trick是通過QLPreviewController的canPreviewItem方法,需要構造一個對象。 這兩個裡面的url參數必須要通過fileURLWithPath建立,和我們通常的做法不同;若使用urlwithString會導緻crash.

3. 合理的分層結構(這很重要,我們就可以替換不同層次的實作,比如替換持久化方案,替換model層的具體實作等),選擇恰當的持久化方案,并将其和記憶體存儲相結合,以實作一個比較好的體驗(這裡不太好展開說,跟需求相關性較大)。

4.基于時間戳的接口重新整理機制;這裡的文檔樹通過單個接口一次性傳回,是以我們通過時間戳的機制來優化拉資料的體驗。

5. 其他的一些異常處理,比如之前下載下傳的檔案在文檔樹中被删除後本地的展示;緩存清空後的體驗;恢複下載下傳的進度等。

6. 作為一個下載下傳相關的應用,還需要保證你所下載下傳的檔案和其中間檔案都是可清理的,并且在磁盤空間不足時需要做相應的保護處理以及UI提醒等。

總的來說,若要實作一個較好的體驗,還是有很多細節需要關注;代碼層次結構和持久化方案上也有很多值得推敲的地方。