UITableView reloadData和@catch块

时间:2012-11-16 16:44:51

标签: ios uitableview try-catch

[UITableView reloadData]未在@catch块中调用

这是我的代码:

@try {
    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
}
@catch (NSException *exeption) {
    [self.tableView reloadData];
}

有时在tableview中插入新行会出现问题(确切地说无关紧要),我想处理它。虽然我测试异常引发@catch块处理它并且崩溃没有发生,但reloadData也没有调用。我还尝试使用perfomSelectorOnMainThread:和GCD:

手动调用主线程上的reloadData
@catch (NSException *exeption) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
}

但它也没有产生任何影响。有人可以建议吗?谢谢!

1 个答案:

答案 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更改未决时,这非常有用。