2016-06-14 6 views
0

私のカスタムフレームワークから例外をスローしようとしています。それがブロックの外に投げ込まれればうまく動作します。 しかし、ブロック内にある場合、アプリは[例外発生]でクラッシュします。問題は、あなたのブロックが非同期と呼ばなっている可能性がある方法で完了ハンドラ/ブロックを作成することを目的C.完了ハンドラ/ブロックからカスタム例外をスローすると、目的のCでアプリケーションがクラッシュする

typedef void (^ServerResponse) (id responseObject, BOOL requestSuccess, NSError* error); 


- (void)getData:(NSUInteger*)id response:(ServerResponse)response 
{ 
    NSString* url = [NSString stringWithFormat:@"%@data/%@“,ServerUrl,[NSString stringWithFormat:@"%ld",(long)vid]]; 
………….. 
……… 
if(statuscode == 200 && [response objectForKey:@“something”]) 
{ 
        NSException* exception = [NSException exceptionWithName:@“Name” reason:@“Data id" userInfo:nil]; 
        [exception raise]; 

} 
} 

答えて

2

にスロー

。したがって、例外が発生するまでにブロック@try - @catchを既に終了している可能性があります。メッセージを記録する@finally節を追加することでこれを確認できます。例外が発生する前に呼び出されることがあります。しかし、ブロックが同期的に呼び出された場合、例外は@catchブロックによって正常にキャッチされます。余談として


あなたはルーチンでエラーを報告したい場合、あなたは他の言語にあなたのような例外をスローかもしれない、NSErrorオブジェクトを渡す必要がありません。例外は、開発フェーズで消耗したプログラミングエラーです。通常のアプリケーションの使用中に自然に発生する可能性のある制御フローには使用されません。重要

を::

が言うException Programming Topics、参照してくださいあなたは、このような範囲外のコレクションへのアクセスのようなプログラミングや予期しない実行時エラーを例外の使用を確保しておき、送信、不変オブジェクトを変異させる試み無効なメッセージ、およびウィンドウサーバーへの接続が失われます。アプリケーションが実行時ではなく作成されている場合は、通常、これらの種類のエラーを例外で処理します。

関連する問題