[UITableView reloadData]
未在@catch块中调用
这是我的代码:
@try {
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}
@catch (NSException *exeption) {
[self.tableView reloadData];
}
有时在tableview中插入新行会出现问题(确切地说无关紧要),我想处理它。虽然我测试异常引发@catch块处理它并且崩溃没有发生,但reloadData也没有调用。我还尝试使用perfomSelectorOnMainThread:
和GCD:
@catch (NSException *exeption) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}
但它也没有产生任何影响。有人可以建议吗?谢谢!
答案 0 :(得分:3)
在Objective-C中,抓住异常并继续前进并不是一个好主意。最好找出错误并防止异常发生。
但无论出于何种原因,您可以尝试-performSelector:withObject:afterDelay:
。
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.0];
<强>更新强>
即使延迟为0, -performSelector:withObject:afterDelay:
也会在稍后run loop内运行。
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.0];
效果是在下一个运行循环中调用-reloadData
方法。当当前运行循环中的UI更改未决时,这非常有用。