2014-07-25 61 views
0

我的根視圖是PSCollectionViewhttps://github.com/ptshih/PSCollectionView)。 在這個類中,我有從我的Web服務加載數據的方法loadDataSource更改ViewControllers時loadDataSource問題

-(void)loadDataSource { 
NSLog(@"Load data source"); 
NSMutableArray *mainListings = [Utils getPosts:selectedCategory begin:@"0" date:@"0"]; 
self.waterflowViewData = mainListings; 
[self.waterflowView.pullToRefreshView stopAnimating]; //This is when i use pull to refresh to call it. 
} 

這種方法被稱爲在rootViewviewDidLoad這樣

[self loadDataSource]; 

而在pullToRefresh方法這樣

__weak ViewController *weakSelf = self; 
[weakSelf loadDataSource]; 

我的問題是,當我使用self.navigationController這個推ViewController正在調用方法loadDataSource。它只在我搜索的這兩個地方被調用。即使當我從第四個ViewController回到第三個ViewController'loadDataSource'被調用(我檢查NSLog)。爲什麼發生這種情況會導致應用程序變得更慢,同時也會利用Web服務資源。

這是我推我所有的ViewControllers

-(void) addButtonClickEvent:(id) sender{ 
    LoginViewController *loginView = [[LoginViewController alloc]init]; 
    [self.navigationController pushViewController:loginView animated:YES]; 
} 
+0

如果你在調用loadDataSource(viewDidLoad和pullToRefresh)的哪個地方調用它的兩個地方之前粘貼一個NSLog?具體來說,當你彈出視圖控制器時,哪一個正在調用它? – CharlesA

+0

我只是想它,它來自viewDidLoad,我也試圖從那裏刪除它,並把它放在'viewWillAppear'和'viewDidAppear'發生過同樣的事情。 – Elgert

+0

viewDidLoad只會在VC第一次加載時被調用。當你將第四視圖控制器彈回到第三視圖控制器時,它不會被調用。如果你在彈出一個VC時顯示viewDidLoad,那麼你的VC推/推邏輯有問題 - 我會去看看 – CharlesA

回答

0

把一個斷點(點擊行號)在你的函數被調用的次數太多,然後運行該應用程序。這會給你其中的函數調用一個不錯的堆棧跟蹤其中:

Xcode stack trace

在頂部的功能是一個在您的斷點,和下面的蹤跡是每個函數調用導致到你的斷點。

變灰的函數是內部函數,而具有黑色文本的函數可能是您的應用程序中的函數。點擊它們,Xcode會顯示調用下一個函數的代碼。點擊輸出窗口(控制檯),然後按回車鍵(或鍵入c - > enter)繼續調試,直到到達下一個斷點。