2

エラー キャッチをコードNSErrorに追加しようとしています。オブジェクトが単独で何をしてくれるのか、自分で何を追加する必要があるのか​​を確認したいと考えています。

this SO questionApple Docsを見るとNSError、数値エラー コード、エラーの場所、およびエラーの説明が保持されているように見えます。これら 3 つの項目すべてについて、コードで指定する必要があります。次に、現在実行中のメソッドの最後までスキップしたい場合 (アプリがメソッドを実行しようとするとクラッシュする可能性が高い)、またはUIAlertViewユーザーにエラーが発生したことを知らせるメッセージを表示する必要がある場合は、次のようにする必要があります。それもすべて自分で指定しますよね?

初心者なので、他にやりたいことはありますか?

4

3 に答える 3

3

NSErrorはエラー情報のコンテナであり、単独では何もしません。このクラスは、コードのさまざまな部分が標準化された方法で相互にエラー情報をやり取りできるように設計されています。取るメソッド内でエラーを設定するだけでは何も起こりNSError**ません -*errorが non-かどうかを確認するnil、メソッドの最後までスキップする、ローカライズされた説明を表示する、ユーザーにアクションを促すなどの処理を行うのは呼び出し元の責任です。

ただし、NSErrorそれをすべて行うことができるほど柔軟です。呼び出し元は、ほとんどすべての種類の情報を提供できます。回復の試みを追跡したり、ローカライズされたメッセージをユーザーに表示したり、追加情報をNSErrorオブジェクトに保存して、呼び出しチェーンのさらに下に戻すことができます。

注: 通常、Cocoa フレームワーク メソッドではNSError、エラーが であるかどうかを確認するのではなく、を使用する前に直接の戻り値を確認する必要がありますnil。メソッドが失敗を示している場合、エラーは有効であることが保証されますが、事前nilに設定したとしても、成功することは保証されません。nil

于 2012-10-26T15:13:08.727 に答える
1

NSError は、エラーのカプセル化として提供されます。これは OO の優れたプラクティスであり、他のシグネチャがそれに対して強く型付けできるようにします。これは、Java および C# の Exception クラスによく似ています。また、NSError を引数として受け取るメソッドに渡すポインターを作成することもできます。メソッドが終了した後、アプリケーションが処理できる条件について NSError を確認できます。

于 2012-10-26T15:08:31.240 に答える
1

達成しようとしていることを説明するのに役立つコードを投稿することを検討することをお勧めします。

できることの 1 つは、エラー オブジェクトを設定するメソッドを呼び出した後、エラーが nil でないかどうかを確認するか、エラー オブジェクトのプロパティを評価することです。

次のようになります。

-(void)someMethod {
    NSError *error;

    [self myMethod:&error];

    if ( error ) {
        // handle the error, display an alert, etc ...
    }
    else {
        // do other stuff when no error occurs
    }
}
于 2012-10-26T15:10:28.663 に答える