天天看點

《iOS元件與架構——iOS SDK進階特性剖析》——第8章,第8.5節解決沖突

本節書摘來自異步社群《ios元件與架構——ios sdk進階特性剖析》一書中的第8章,第8.5節解決沖突,作者 【美】kyle richter , joe keeley,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

8.5 解決沖突

ios元件與架構——ios sdk進階特性剖析

文檔處于沖突狀态時,可通過nsfileversion類獲悉文檔的各種版本。使用者輕按按鈕resolve conflict時,将調用方法resolveconflict-tapped:。這個方法收集處于沖突狀态的文檔的版本資訊,并執行個體化一個自定義的頁面視圖控制器,讓使用者能夠浏覽不同的沖突版本并選擇最終版本。

《iOS元件與架構——iOS SDK進階特性剖析》——第8章,第8.5節解決沖突

這個方法首先擷取沖突版本,即不能合并到本地版本的遠端版本,并将它們放到一個數組中,因為可能存在多個沖突版本。接下來,這個方法擷取文檔的目前版本,即本地編輯的版本,并将它和沖突版本一起加入到一個可變數組中。這個可變數組提供了所有版本,供使用者進行評估以選擇正确的版本。然後,這個方法建立一個icfconflictresolutionviewcontroller執行個體,這是一個自定義頁面視圖控制器,讓使用者能夠浏覽沖突版本并選擇正确版本。接下來,設定這個頁面視圖控制器的屬性,讓它知道有哪些沖突版本、目前版本是哪個(這對後面解決沖突很重要)、處于沖突狀态的備忘錄的url以及標明正确版本後要調用的委托。

注意:

頁面視圖控制器提供了浏覽沖突版本的友善途徑,但并非隻能采用這種方式。任何可顯示沖突版本資訊并讓使用者選擇正确版本的方式都可行。

接下來,顯示沖突解決頁面視圖控制器,如圖8.6所示。

《iOS元件與架構——iOS SDK進階特性剖析》——第8章,第8.5節解決沖突

對于備忘錄的每個沖突版本,沖突解決頁面視圖控制器都建立一個icfconflictversionview controller執行個體,用于顯示該沖突版本的資訊。在方法viewcontrolleratindex:storyboard:中,頁面視圖控制器根據需要執行個體化版本視圖控制器,并指定它應顯示哪個nsfileversion。

《iOS元件與架構——iOS SDK進階特性剖析》——第8章,第8.5節解決沖突

為顯示各個版本的資訊,版本視圖控制器在方法viewdidload中從其nsfileversion那裡擷取這些資訊,并更新使用者界面。

《iOS元件與架構——iOS SDK進階特性剖析》——第8章,第8.5節解決沖突

詳細視圖控制器再根據標明版本是否是目前版本采取相應的措施,以解決沖突;這是在方法noteconflictresolve:forcurrentversion:中完成的。這個方法檢查傳入的參數iscurrentversion,如果其值為yes,就删除url指定的檔案的其他版本,并告訴其他版本沖突解決了。

《iOS元件與架構——iOS SDK進階特性剖析》——第8章,第8.5節解決沖突

此時,文檔将發出通知,指出自己恢複到了正常狀态。方法documentstatechangedmethod收到這個通知後,讓使用者能夠繼續編輯文檔(這在8.4.2節介紹過)。