IOS開發中重寫init方法使用需謹慎


IOS開發中重寫init方法使用需謹慎

  今天在寫一個小軟件的時候出現一點問題,這個軟件的功能是搜索全國學校,首頁就是搜索輸入框,在框中輸入完要查詢的學校所在省份,點擊buttom后就會跳轉到對應的視圖控制器中,然后把搜索結果呈現在一個TableView上,但是我在調試時,每次輸入完然后點擊搜索按鈕時,彈出結果列表總是空的,我需要返回到首頁再點擊一次搜索才會出現結果,而且我在首頁更改搜索關鍵字之后,點擊搜索,結果還是上次的搜索結果,必須返回點擊一次才會出現這次的搜索結果。

  經過大神指點,原來這個問題產生的原因是我錯誤的使用了重寫init方法。我重寫的方法如下,原本打算是在初始化的時候就給view一個標題和背景色:

1 //自定義初始化
2 -(instancetype)init{
3     if (self = [super init]) {
4         self.view.backgroundColor = SCreenColorMyGray;
5         self.title = @"搜索";
6     }
7     return self;
8 }

  但問題恰恰出現在這個重寫的初始化方法中,具體分析如下:

  先在首頁中創建一個搜索頁面:

1 ResultTableViewController *resultTableVC = [[ResultTableViewController alloc]init];

 

  這時候就已經出現問題了,因為這時候就會調用init方法,如果我不重寫init方法,默認就走viewdidload,這時候就是正確的,但是 由於我的自定義方法中有一個self.view,這時候其實還沒有view,所以調用self.view之后就會先去創建一個view,這時候就會調用到一個方法:-(void)loadView,而這個方法就是加載view,就相當於這時候已經把我要push的界面先呈現出來了,但是由於我還沒有往過傳數據,所以就會導致搜索結果列表中什么都沒有,所以在使用自定義init方法的時候一定要謹慎使用self.view這樣的語句,有時候會導致無法預期的錯誤,而又因為這樣的錯誤對計算機來所不是錯誤,只是編程者的邏輯錯誤,所以陷入這樣的bug之后很難pop出來。

作為一個菜鳥,把自己犯的錯誤記下來,有助於以后不犯或少犯錯誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM