今天在寫一個小軟件的時候出現一點問題,這個軟件的功能是搜索全國學校,首頁就是搜索輸入框,在框中輸入完要查詢的學校所在省份,點擊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出來。
作為一個菜鳥,把自己犯的錯誤記下來,有助於以後不犯或少犯錯誤。