iOS 恢復(fù)現(xiàn)場

恢復(fù)現(xiàn)場的涵義是當前app在A頁面被系統(tǒng)殺死后,下次進入app仍然進入頁面A。


實現(xiàn)思路:

這個操作有三個關(guān)鍵的步驟:

  1. 獲取當前視圖,保存視圖必須要的屬性。
  2. 將上述內(nèi)容在必要的時保存在本地以及刪除。
  3. 在進入app時讀取內(nèi)容,生成視圖并為之賦值。
問題1,如何獲得當前視圖以及其對應(yīng)必要屬性
  • 獲得當前視圖
    我的方案是給appdelegate寫了一個方法用于使用,代碼如下:

    - (UIViewController *)getVisableVC
    {
          UIViewController * vc = self.window.rootViewController;
          while ([vc isKindOfClass:[UITabBarController class]]) {
            vc = ((UITabBarController *)vc).selectedViewController;
        }
    
        while ([vc isKindOfClass:[UINavigationController class]]) {
            vc = ((UINavigationController *)vc).visibleViewController;
        }
    
        while (vc.presentedViewController) {
            vc = vc.presentedViewController;
        }
        return vc;
    }
    
  • 獲得當前視圖的必要屬性(注意這里需要存儲額外的類名,便于后續(xù)生成實例)
    我的方案是給UIViewController添加了一個類方法用于實現(xiàn),返回必要的屬性名(然后利用kvc)。實際使用如下:

    #pragma mark 恢復(fù)現(xiàn)場
    + (NSArray *)restoreSceneKey
    {
      return @[@"comic_id",@"comicName"];
    }
    
問題2,何時存儲或者刪除本地內(nèi)容
  • 何時觸發(fā)存儲操作

    思路1:在系統(tǒng)殺死程序時存儲——Pass(我們無法在程序被系統(tǒng)殺死獲得消息)
    思路2:在系統(tǒng)進入后臺時存儲內(nèi)容——winner(迂回路線,實現(xiàn)需求)

  • 何時觸發(fā)刪除操作

    1. 在進入app得去本地內(nèi)容跳轉(zhuǎn)到需要恢復(fù)的視圖后刪除
    2. 配合思路二,在得到程序被認為殺死的消息時刪除

    PS:至于存儲方式,我采用的是plist本地文件存儲

問題3,進入app時生成視圖并為之賦值
  • 生成視圖
    利用解決問題1時存下的類名生成對應(yīng)的實例。

  • 為之賦值

    1. 利用kvc為之賦值
    2. 利用runtime為之賦值

    在demo中我采用的是利用runtime為之賦值,kvc的方式?jīng)]有實踐過,此處就留個讀者自己拓展實現(xiàn)了

Demo

在Demo中我采用的存儲方式是plist文件形式存儲,為視圖賦值采用的是runtime形式,并在其中添加了健壯性檢測,防止本地文件被修改后導(dǎo)致的錯誤
Demo地址

遭遇的坑

  • 思考過不需要視圖實現(xiàn)任何方法,直接用運行時得到所有屬性存儲起來,但是由于無法區(qū)分屬性的私有的還是公開的,如果取屬性會把所有的包括UIView,layer等展示屬性也給存起來,所以作罷
  • 使用過讓視圖傳必要屬性的以及其對應(yīng)的值回來,但是Demo中健壯性檢測不太方便做,而且實現(xiàn)層面需要多寫代碼,不合算。仔細考慮了一下kvc就只需要key在用kvc取value就可以了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,043評論 4 61
  • 懵懂年少的我遇到了自己的第一段相互有回應(yīng)的感情 青澀更多點的是羞澀囊中羞澀 純真年少的戀情很快就被現(xiàn)實瑣碎的事務(wù)沖...
    98e05a4bbfbe閱讀 192評論 0 0
  • 第二十一章 余景灝再回去路上一直壓抑著低落的心情,不想被平生看出來。所以一路上平生問什么他都只是點頭,眼睛也一直望...
    星如雨雨雨閱讀 286評論 0 0
  • 老大鋼琴九級考試前兩天,突然被知道還有一首7頁長的貝多芬奏鳴曲沒有彈。這個曲子3個月前彈過,中間沒再碰過。 當聽到...
    向內(nèi)向外閱讀 218評論 0 0
  • 每個女人身邊都有一個好朋友陪著走過大半輩子,那就是我們的“大姨媽”,身邊常有許多女性感嘆:女人要是沒有大姨媽這個麻...
    Acymer元元閱讀 989評論 6 13

友情鏈接更多精彩內(nèi)容