2

CommonCryptorを使用して暗号化および復号化するためのラッパーがあります。ときどき復号化プロセスが失敗することがあります。その場合、次のようなエラーを入力します。

if (result == kCCSuccess) {
    cipherData.length = outLength;
} else {
    if (error) {
        *error = [NSError errorWithDomain:kBridgeEncryptorErrorDomain
                                     code:result
                                 userInfo:nil];
    }

    return nil;
}

そして、次のようにエラーをログに記録します。

if (error != nil) {
    DDLogError(@"Decrypt fail %i, %@", [error code], [error localizedDescription]);
}

ただし、これにより、次のような文字列が生成されます。

2013-01-09 09:15:19.753 [BridgeEncrypter decryptDataFromData:] [Line 83] E: Decrypt fail -4304, The operation couldn’t be completed. (com.***.bridgecrypt error -4304.)

-4304は、 CommonCryptor.h (-4300〜-4305)のエラーコードのいずれかである可能性があります。エラーコードを文字列値にマッピングする良い方法はありますか、それともswitch文字列を手動で調整するステートメントが必要ですか?に依存する必要がある場合switch、ベストプラクティスは、問題がログに記録される場所またはエラーが生成される場所に配置することです。

4

1 に答える 1

2

ここで何を探しているのかわかりません。CommonCryptorや、その中でエラーメッセージがどのように処理されるかについてはよくわかりません。

NSErrorとそのuserInfoおよびNSLocalized*Key機能を利用することをお勧めします。

たとえばNSLocalizedDescriptionKey、userInfoディクショナリにを設定すると、エラーが発生します。

NSDictionary userInfo = @{
    NSLocalizedDescriptionKey : @"This is the error message I want users to see"
};
*error = [NSError errorWithDomain:kBridgeEncryptorErrorDomain
                             code:result
                         userInfo:userInfo];

次にThis is the error message I want users to see、によって返される文字列-localizedDescriptionです。次に、呼び出し元のコードは文字列を使用して、メッセージを再解釈することなくユーザーにメッセージを表示できます。

エラーコードをユーザーに見せたいメッセージにリンクする方法については、エラーコードを人間が読める文字列に変換するCommonCryptor関数があります。そうでなければ、あなたはあなた自身を書くことができます。スイッチの使用をお勧めします。

NSString *MyCodeToLocalizedDescription(CCCryptorStatus cryptorStatus)
{
    switch(cryptorStatus) {
    case kCCDecodeError: return @"This is the error message I want users to see";
    …
    default: return @"Oh noes, unknown error";
    }
}

その時点でのエラーの設定は次のとおりです。

NSDictionary userInfo = @{
    NSLocalizedDescriptionKey : MyCodeToLocalizedDescription(result)
};
*error = [NSError errorWithDomain:kBridgeEncryptorErrorDomain
                             code:result
                         userInfo:userInfo];
于 2013-01-09T15:45:58.727 に答える