2017-06-15 43 views
0

我有兩個UIViewController A和B,帶有navigationController.On頁面A,在調用API創建/更新UITableView之後。在A上選擇一個單元格後,控制轉到B.還在B頁面上調用API並呈現tableView。在B頁面API中有一些圖像,所以渲染tableview需要時間。在渲染表格視圖之前調用API &後,如果我點擊返回按鈕,控件進入A頁面並點擊A的API。但我注意到B頁面中的表格視圖仍嘗試渲染。所以有時我的應用程序崩潰的原因是「數據源未設置」。objective C:在離開ViewController後停止加載TableView

+0

這將是看到一些你的代碼,例如,你是如何處理的(大概是異步),網絡電話和響應,及實現的tableView更新 – SomaMan

回答

0

當你離開(點擊返回)視圖控制器,它必須dealloced,這似乎是一個內存泄露問題,所以要檢查這個將此代碼添加到B的ViewController

deinit { 
    print(1) 
} 

如果一切正常,它將打印「1」,如果沒有,檢入B控制器 - 你有一些塊(閉門器)嗎?, 如果是的話,塊中是否使用「自我」?你使用「弱自我」嗎?

__weak MyObject *weakSelf = self; 

必須解決您的問題。

+0

謝謝你的回覆非常有用。我添加了這個代碼 - (void)dealloc NSLog(@「1」); } 它在B控制器視圖的表格呈現之後被打印。 –

+0

我也試圖禁用BACK按鈕self.navigationItem.backBarButtonItem.enabled = NO,但此代碼無法正常工作。但我可以從此代碼隱藏BACK按鈕self.navigationItem.hidesBackButton = YES。 –

+0

我認爲ViewController是被處理的,你不需要取消你的請求(如果它是asyc),但是如果你需要的話,你可以嘗試在deinit方法中超時你的請求 –

0

我想你還沒有在你的imageview中爲cellForRowAt indexpath方法中的延遲加載圖像創建弱引用。嘗試在數據源方法中使用下面的代碼,它會幫助你。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
CustomTableviewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
__weak UIImageView *weakImageView = cell.yourImageView; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    weakImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"url"]]]; 
}); 
return cell; 
} 
相關問題