NSAssert
予期しない状況が発生した場合、アプリケーションがすぐに失敗してクラッシュ ログに意味のあるメッセージが表示されるように、iPhone アプリ全体で使用しようとしています。
これは、失敗NSAssert
がメインスレッドにある場合、NSInternalInconsistencyException
デフォルトで発生し、キャッチされずに実行を停止するため、正常に機能します。しかし、私はバックグラウンド スレッドでも処理を行っています。この場合、NSAssert
スレッドは中止されますが、プログラミングは実行され続けます。
私の現在の解決策は、メイン スレッド (この場合はNSOperation
のmain
メソッド) で例外をキャッチして再スローすることです。
- (void)main {
@try {
int x = 14;
...
NSAssert1(x > 20, @"x should be greater than 20, was %d", x);
...
}
@catch (NSException *e) {
[e performSelectorOnMainThread:@selector(raise) withObject:nil waitUntilDone:YES];
}
}
より良い方法はありますか?おそらくカスタム NSAssertionHandler を使用していますか?
assert
私は、静的注釈でC を使用できることを知っています。
assert(x > 20 && "x should be greater than 20");
しかし、これでは の実際の失敗値が何であるかを示すことはできませんx
。