根据预期的字符串检查NSError描述失败

时间:2014-01-13 00:47:54

标签: ios objective-c cocoa-touch nsstring nserror

我的程序检查是否存在NSError对象,并将其发送到另一个方法,如下所示:

   if([response isEqualToString:@""]) {
        [self handleError:commandError];
    }

handleError:中,我尝试根据预期的字符串检查本地化描述:

-(void)handleError:(NSError*)error
{
    NSString* errorDescription = [error localizedDescription];
    NSLog(@"%@",errorDescription); //works fine
    if([errorDescription isEqualToString:@"sudo: no tty present and no askpass program specified"]) {
        NSLog(@"SO Warning: Attempted to execute sudo command");
    }

}

但是,if语句没有触发。日志输出与我在if语句中输入的内容完全相同。

2 个答案:

答案 0 :(得分:0)

除非你认真考虑iOS的If语句结构被破坏,或者isEqualToString方法实现被破坏,否则字符串不是相同而且没有神秘感:

您输入的内容是使用不同的字符(请参阅:unicode和字符编码类型),或者您的日志输出中有不可见/非打印字符,因为您无法看到它们。

我建议循环遍历字符串中的字符并打印出字节代码值:

for(i = 0到字符串的长度):print [errorDescription characterAtIndex:i];

您会发现您键入的字符串的字节代码序列等于localizedDescription方法返回的字节代码序列。

正如其他人所说,基于精确字符串的程序逻辑,你无法控制,哪些可以在没有通知的情况下改变,这可能不是最佳解决方案。错误代码怎么样?

答案 1 :(得分:0)

我建议使用错误代码,因为您使用的是无法控制的库,通常暴露的接口应该告诉您与每种类型的预期错误相关的错误代码是什么。使用错误代码可以使您的代码更强大,清晰且与字符串无关。

无论如何,如果您希望继续比较字符串值,因为您有充分的理由这样做,我建议您知道可能的标点符号,格式化字符(例如换行符)或小写/大写字母