objective C:在离开ViewController后停止加载TableView

问题描述:

我有两个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

当你离开(点击返回)视图控制器,它必须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方法中超时你的请求 –

我想你还没有在你的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; 
}