将错误代码转换为iOS中的文本

时间:2013-01-09 15:09:31

标签: ios logging error-code commoncrypto

我有一个使用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,那么最佳做法是将其放在记录问题的位置或产生错误的位置吗?

1 个答案:

答案 0 :(得分:2)

我不确定你在这里寻找什么。我不熟悉CommonCryptor或者如何处理错误消息。

我建议你依靠NSError,它是userInfo和NSLocalized * Key功能。

例如,如果在userInfo字典中设置NSLocalizedDescriptionKey,则输入错误:

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];