UIAlertView與[UIApplication sharedApplication].keyWindow.rootViewController的沖突解決

在項目開發過程中,我遇到這樣的一個問題:架構是tabViewController+NavigationViewController,在一個子控制器中我需要一個alertview點擊后響應[self.navigationControllerpopToViewController:[self.navigationController.viewControllersobjectAtIndex:i]animated:YES];

結果報錯:reason: '-[_UIAlertShimPresentingViewController setHide:]: unrecognized selector sent to instance 0x146dfeb0'

從報錯的信息來看是_UIAlertShimPresentingViewController沒有定義setHide函數,而我的setHide函數是定義在我的tabViewController里的,

后來追溯原因發現是因為我的子控制用到了以下兩個函數(用來控制自定義的tabbar是否顯示)

-(void)viewWillAppear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)[UIApplicationsharedApplication].keyWindow.rootViewController;

[tabbarcontrollersetMyHide:YES];

}

-(void)viewWillDisappear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)[UIApplicationsharedApplication].keyWindow.rootViewController;

[tabbarcontrollersetMyHide:NO];

}

后來發現先彈出了個alertview,再去使用keywindow,此時的keywindow.rootviewcontroller就是UIAlertShimPresentingViewController,因此無法執行setHide函數。

我的解決方案時不使用[UIApplicationsharedApplication].keyWindow.rootViewController去獲取根視圖,通過

self.view.window.rootViewController去獲取根視圖。

代碼如下:

-(void)viewWillAppear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)[UIApplicationsharedApplication].keyWindow.rootViewController;

[tabbarcontrollersetMyHide:YES];

}

-(void)viewWillDisappear:(BOOL)animated

{

tabViewController*tabbarcontroller = (tabViewController*)self.view.window.rootViewController;

[tabbarcontrollersetMyHide:NO];

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.UILabel 1) label.frame //CGRectMake(x, y, width, he...
    青春flame閱讀 650評論 0 2
  • *7月8日上午 N:Block :跟一個函數塊差不多,會對里面所有的內容的引用計數+1,想要解決就用__block...
    炙冰閱讀 2,534評論 1 14
  • 哦吼吼,又研究了幾天,把FMDB這個封裝好的數據庫搞定了,寫了個簡單的例子,基于FMDB的添刪改查操作,界面很一般...
    lichengjin閱讀 552評論 0 0
  • 作者唯一QQ:228544117。。。。。 =========后面的都要新建一個文章 AppDelegate.h ...
    CC_iOS閱讀 944評論 0 0
  • 十七歲的耿耿你好,我是十七歲的路星河。 看完《最好的我們》,沒有被余淮和耿耿十多年的相互牽掛打動,也沒有被路星河...
    summer大太陽閱讀 688評論 0 0