app加載留储,如何確認默認根控制器

  • app剛剛啟動的時候翼抠,要去選擇他的根控制器,這是每個app必須思考處理的問題获讳,launch的基本事情是這樣的,1,2,3阴颖,(4一會在討論)
  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        //1創(chuàng)建
        window = UIWindow()
        window?.frame = UIScreen.mainScreen().bounds
        //2設置根目錄,WXMainController
        window?.rootViewController = defaultRootController() //一個獲取默認控制器的方法,在本類中
        //3設置可視化
        window?.makeKeyAndVisible()
        //4注冊監(jiān)聽通知
       WXNotificationCenter.addObserver(self, selector: "updateRootViewController:", name: WXChangeRootViewControllerNotification, object: nil)
        return true
    }

但是具體如何選擇默認控制器那丐膝?我們那微博舉例量愧,就是主控制器(要區(qū)分是否登錄),歡迎控制器,新特性控制器

主控制器(已登錄)
未登錄頁面

ps:注意尤误,已登錄,和未登錄頁面我用的是同一個控制器结缚,只不過是調(diào)用這個控制器的時候损晤,重寫了load方法,去判斷一下是否登錄红竭,然后去加載不同的頁面

    //loadView
    override func loadView() {
        let usr = WXUser.fetchUserInfo()
        userLogin ? super.loadView() : setupVisitorView()
    }
版本新特性
歡迎頁面
  • 那么如何去判斷到底如何跳轉那尤勋,其實基本的app的跳轉不外乎這幾種
app默認rootVc

在appDelegate類中喘落,可以添加一個方法,專門去判斷的默認控制器(如果你認為不好最冰,可以專門提取瘦棋,做一個工具欄,用來判斷)

    /**
     返回默認的根控制器
     
     :returns: 跟控制器
     */
    private func defaultRootController() -> UIViewController{
        //判斷是否登錄
        if WXUser.isLogin()  //登錄了
        {
          //判斷是不是新的版本
           return isNewUpdateVersion() ? WXNewFeatureController() : WXWelcomeController()
        }else{//沒有登錄
           return WXMainController()
        }
    }

判斷是不是新的版本

    /**
     判斷是不是新的版本
     
     :returns: 是或者不是新版本
     */
    private func isNewUpdateVersion() -> Bool{
        /**
         *  如果是給公司開發(fā)些項目暖哨,我們比較版本號的規(guī)則是:1.沖網(wǎng)絡上獲取版本號赌朋,2.通過鍵“shortString”來獲取該版本號,然后比較篇裁,基本不用保存到本地
             但是微博等項目沛慢,我們比較的方法確不同:1.通過“shortString”獲取該版本號,2.沖本地獲取保存的版本號
         */
        //1.通過“shortString”獲取該版本號
        let currentVersion = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
        //2.本地獲取版本
        let saveVersion = NSUserDefaults.standardUserDefaults().objectForKey("BundleVersionString") as? String ?? ""
        //3.比較連個版本
        if currentVersion.compare(saveVersion) == NSComparisonResult.OrderedDescending
        {
            //4.保存新的版本號
        NSUserDefaults.standardUserDefaults().setObject(currentVersion, forKey: "BundleVersionString")
            return true
        }
        return false
    }

說明幾點:

  1. 這里要說蘋果一個很牛逼的方法,及時compare這個达布,返回的數(shù)據(jù)都是字符串团甲,1.2.3空字符串能比較,也可以和1.5比較黍聂,太神奇了躺苦,

2.NSUserDefaults.standardUserDefaults().objectForKey("BundleVersionString") as? String ?? ""的作用:就是as前邊的如果是nil,那么就給他as后邊的“”产还,當然你也可以給他別的~

3.如果在歡迎Vc匹厘,或者新版本Vc,最后都要去mainVC雕沉,怎么去集乔?
直接使用和這個UIApplication.sharedApplication().keyWindow?.rootViewController = 要選擇的控制器,直接給控制器。

4.真實公司的項目坡椒,和微博的項目的比較version的區(qū)別請認真看上邊的那一大段注釋文字

5.文章開始的代碼中扰路,為毛要注冊通知?當我們要在其他控制器設置根控制的時候倔叼,直接給Windows.rootVc 設置值就好了汗唱,微博項目就有新特性VC歡迎VC需要賦值丈攒,不多哩罪,但是對于大項目,好多地方可以巡验,所以感覺亂亂的代碼际插,不方便同意管理,所以我認為將他放到appDelegate中統(tǒng)一管理就好显设,那么問題來了框弛,那么遠,怎么管理捕捂,聰明的同學想到了就是通知瑟枫!
所以才有了一開始注冊通知的代碼斗搞,既然有注冊,就要有移除

  • 移除監(jiān)聽
    deinit{
       WXNotificationCenter.removeObserver(self, name: WXChangeRootViewControllerNotification, object: nil)
    }
  • 接收通知相應的事件
    /**
     當接收通知的時候慷妙,用來去更新rootViewcontroller
     ps:接收通知的時候僻焚,調(diào)用的方法,千萬不要去用private修飾膝擂,有問題
     :param: notifi 接收的通知
     */
     func updateRootViewController(notifi : NSNotification){
        /** 
         //打印出來的notifi內(nèi)容
         NSConcreteNotification 0x7f9be950f2a0 {name = WXChangeRootViewControllerNotification; object = 1}
         */
        let isMainVc = notifi.object as! Bool
        if  isMainVc == true {
            window?.rootViewController = WXMainController()
        }else{
            window?.rootViewController = WXWelcomeController()
        }
    }

遠處發(fā)來幽怨的通知虑啤,記住要發(fā)true,或者false猿挚,我這里是判斷去那個頁面的

WXNotificationCenter.postNotificationName(WXChangeRootViewControllerNotification, object: true)
  • 你問我這個WXNotificationCenter,WXChangeRootViewControllerNotification咐旧,這個為毛寫的這么好,可以看看我的另一篇文章ios代碼規(guī)范

最后還要說明一下绩蜻,就是swift中如何定義常量字符串和宏定義

1.全局的

let WXChangeRootViewControllerNotification = "WXChangeRootViewControllerNotification"
var WXScreenWidth = UIScreen.mainScreen().bounds.size.width
let WXNotificationCenter = NSNotificationCenter.defaultCenter()

2.私有的

private let reuseIdentifier = "Cell"
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铣墨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子办绝,更是在濱河造成了極大的恐慌伊约,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孕蝉,死亡現(xiàn)場離奇詭異屡律,居然都是意外死亡,警方通過查閱死者的電腦和手機降淮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門超埋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佳鳖,你說我怎么就攤上這事霍殴。” “怎么了系吩?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵来庭,是天一觀的道長。 經(jīng)常有香客問我穿挨,道長月弛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任科盛,我火速辦了婚禮帽衙,結果婚禮上,老公的妹妹穿的比我還像新娘贞绵。我一直安慰自己厉萝,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冀泻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜡饵。 梳的紋絲不亂的頭發(fā)上弹渔,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音溯祸,去河邊找鬼肢专。 笑死,一個胖子當著我的面吹牛焦辅,可吹牛的內(nèi)容都是我干的博杖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼筷登,長吁一口氣:“原來是場噩夢啊……” “哼剃根!你這毒婦竟也來了?” 一聲冷哼從身側響起前方,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狈醉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惠险,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苗傅,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年班巩,在試婚紗的時候發(fā)現(xiàn)自己被綠了渣慕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抱慌,死狀恐怖逊桦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遥缕,我是刑警寧澤卫袒,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站单匣,受9級特大地震影響夕凝,放射性物質發(fā)生泄漏。R本人自食惡果不足惜户秤,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一码秉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸡号,春花似錦转砖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晋控。三九已至,卻和暖如春姓赤,著一層夾襖步出監(jiān)牢的瞬間赡译,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工不铆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝌焚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓誓斥,卻偏偏與公主長得像只洒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子劳坑,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,389評論 2 4
  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多毕谴,會對里面所有的內(nèi)容的引用計數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,486評論 1 14
  • 不知不覺又搞到這么晚距芬,額析珊,其實和我平時的作息習慣相比,也不是很晚啦蔑穴,我的主要意思是忠寻,又到了一個我覺得可以無所作為的...
    不合理存在閱讀 151評論 0 1
  • 你的身體睡了 你的靈魂呢 你的眼睛睡了 你的往事呢 你的耳朵睡了 你的脆弱呢 你的嘴巴睡了 你的想法呢 你睡了 你...
    玩主楊笑閱讀 187評論 0 0
  • 感謝師傅小黃河推薦的軟件。 開始第一篇吧存和。 我們來聊聊原生家庭奕剃。 第一篇說這個話題是前幾天那個虐狗的情人節(jié),隔天我...
    小Q童鞋就是我本人閱讀 304評論 1 0