2013-01-09 3 views
2

CommonCryptor를 사용하여 암호화하고 해독하는 래퍼가 있습니다.iOS의 텍스트로 오류 코드 변환

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에 의존해야한다면 문제가 기록 된 위치 또는 오류가 발생한 위치를 기록하는 것이 가장 좋습니다.

답변

2

나는 당신이 여기에서 찾고있는 것이 확실하지 않습니다. CommonCryptor에 익숙하지 않거나 오류 메시지가 처리되는 방식에 익숙하지 않습니다.

NSError에 의지하고 userInfo 및 NSLocalized * Key 기능을 사용하는 것이 좋습니다. 예를 들어

, 당신은 사용자 정보 사전에서 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]; 
+0

. 나는 오류 코드를 매핑하기 위해 여러 위치에서 스위치 케이스를 피하기를 바랬는데 어리석은 방법으로 생각하지 않았습니다. – thegrinner