3

[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];
    });
}

しかし、それも効果がありませんでした。誰かが何か提案できますか?ありがとう!

4

1 に答える 1

3

Objective-C では、例外をキャッチして続行することはお勧めできません。何が問題なのかを突き止め、例外が発生しないようにすることをお勧めします。

しかし、何らかの理由で、試すことができます-performSelector:withObject:afterDelay:

[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.0];

アップデート

-performSelector:withObject:afterDelay:遅延が 0 の場合でも、常に後の実行ループで実行されます。

[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.0];

-reloadDataその結果、次の実行ループでメソッドが呼び出されます。これは、現在の実行ループで保留中の UI 変更がある場合に役立ちます。

于 2013-03-21T00:32:44.690 に答える