2017-05-15 50 views
5

據我瞭解,在UIDocument類可以跟蹤對文件的未保存的更改,甚至鎖定該文件,因此它不能由一個以上的人被檢查出。但是如果用戶強制退出應用程序而不保存或應用程序崩潰會發生什麼?如何將未保存的更改恢復到UIDocument,以便在應用程序重新啓動時重新打開UIDocument以及最近未保存的更改?我需要在更改每個文件之前製作重複副本,並更改​​臨時副本,直到用戶保存更改爲止?還是Apple提供了一個更簡單的實現?我還考慮過編碼並將Data文件內容和每個UIDocument實例的undoManager定期存儲爲緩存。這會起作用嗎?UIDocument恢復未保存的更改在應用程序崩潰/強制退出

回答

1

UIDocumentUIManagedDocument做AUTOMAGIC改變尊重其他系統約束(例如跟蹤(調用一個函數,其中文件是否改變了你可以返回true),並保存到磁盤的變化:如果另一個進程正在嘗試讀取文件)。 如果您不覆蓋基類方法,Apple會採用非常安全的方式進行保存。當保存操作被觸發時,Apple保存到臨時文件,如果保存成功,則完成原始文件的快速重命名和刪除(IIRC重命名/刪除是原子的,或接近原子的)。您可以假定保存操作不會在文件系統中留下99.99%的損壞文件。

蘋果觸發保存在特定點後臺操作(如:基於時間,程序切換到後臺,先於其他進程試圖訪問該文件,...),但我找不到任何明確的說法發生了什麼當應用程序被強制退出時。

這就是說,邏輯和常識告訴我,如果你強制退出一個應用程序,當前文件狀態不能保存。即使手動實施強制退出的「快速保存」在技術上可能也不可行。定期的背景保存操作(如UIDocument已經這樣做)可能是最好的策略。

關於保存撤消管理器的狀態:這將是相同的技術問題與節約UIDocument。沒有事件或其他任何事情告訴應用程序即將被強制退出。

你應該閱讀Apple Documentation。它很長,但它更詳細地解釋了這個過程。我的建議是,實施蘋果強加的戰略。這些策略非常完善,適用於Apple生態系統中的許多應用程序以及用戶。最重要的是,您可以降低實施成本並實現自動化改進(當Apple更新其實施時)。

+0

你的建議aside-我會如何讓用戶直到他們選擇保存有文檔未保存的更改,同時還恢復任何未保存的更改,就像字確實,如果電腦關機? –