ios - 在 iOS 中将错误代码转换为文本

标签 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 语句来手动调整字符串?如果我确实必须依赖开关,最佳实践是将其放在记录问题或生成错误的位置吗?

最佳答案

我不确定您在这里寻找什么。我不熟悉 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];

然后这是我希望用户看到的错误消息-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];

关于ios - 在 iOS 中将错误代码转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238287/

相关文章:

ios - iOS 上的 fft numpy 风格以非二次方数据长度加速

ubuntu - Ubuntu 上的 Hadoop 启动错误

C++ wstring 到文件而不是字符串

bash - 检查程序中的错误代码-特别是HTK Toolkit

WSO2 ESB 未知错误代码 102511

android - Firebase Auth - 暴力攻击预防

ios - CFBundleDisplayName 中的空间与 plutil

java - 无法抑制 jar 中的日志输出

mysql - 错误代码: 1826. Duplicate foreign key constraint name 'menu_ibfk_1'

ios - 无法使用 http URL 加载我的 WebView