5

Restkitのオブジェクトマネージャーを使用して、リモートAPI呼び出しのかなりの部分を処理しています。

さまざまなエラーに対してNSAssertをスローします。たとえば、サーバーが整形式のJSONではなくエラーページを返す場合、コードに問題がない場合でも、NSAssertが発生します。

私が混乱していることがいくつかあります(そのほとんどは、例外とnsassertの一般的な処理に関係しています)。

  1. これらのNSAssertsエラーをどのように処理する必要がありますか?たとえば、数回再試行してから、(アプリケーションをクラッシュさせるのではなく)「何か問題が発生しました」というメッセージを表示したいとします。

  2. catch-tryブロックを使用してエラー(以下のコード)をキャッチしようとしましたが、エラーがキャッチされていません。だから私のアプリは失敗し続けます。さらに、とにかくリリースモードでtry-catchを使用するのは苦手です。

  3. 私の理解のために、Restkitが他の失敗ではなくNSAssertsを使用するのはなぜですか?

コード:

// code to catch NSAssert that sharedManager throws
@try{
    [sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self];
}

@catch (NSException *ex) {
    NSLog(@"exception caught");
}
4

1 に答える 1

4

一般に、エラーは何かがひどく間違っていることを意味するため、エラーをキャッチしようとすべきではありませんNSAssert。たとえば、アプリケーションの内部状態が矛盾している、ライブラリを間違って使用しているなど、アプリケーションを終了する必要があります。[1]

エラーがキャッチされない理由は、NSException のインスタンスではなく文字列NSAssertであるNSInternalInconsistencyException[2]が発生するためです。[3] に従ってそれらをキャッチすることもできます。

    @catch (id ex)

ただし、上記の理由からお勧めしません。

NSAssert3 番目の質問に答えるには、どのような問題が提起されているかなどの詳細をお知らせください。

[1]実際、NSAssert のポイントは何ですか?

[2] http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/macro/NSAssert

[3] http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html

于 2011-06-18T13:44:24.850 に答える