你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> IOS開發中重寫init方法使用需謹慎

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

編輯:IOS編程技術

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

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

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

 //自定義初始化
 -(instancetype)init{
     if (self = [super init]) {
         self.view.backgroundColor = SCreenColorMyGray;
         self.title = @"搜索";
     }
     return self;
 }

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

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

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

 

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

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved