【发布时间】:2014-01-13 00:47:53
【问题描述】:
我的程序检查 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 语句中输入的内容完全相同。
【问题讨论】:
-
您确定描述中没有隐形字符吗?要检查,打印分隔符之间的描述:
NSLog(@"|%@|", errorDescription); -
请发布 NSLog 输出。
-
另外,这不是正确的 Cocoa 错误处理。约定要求您在使用
NSError之前检查直接返回值,而不是检查错误是否为nil。通过快速阅读,我相信 NMSSH 正确地遵循了约定。除非execute:error:的返回值为nil,否则您不应触及该错误。不过,这不太可能是您的问题的一部分。 -
@JoshCaswell,感谢第一个提示,我意识到有一个换行符。事情现在输出正常。另外,我更改了第一个条件以反映“约定”。原来即使有错误,响应也不是
nil,只是一个空字符串。 -
根据硬编码的英文字符串检查错误的本地化描述对于非英文用户可能会失败。
标签: ios objective-c cocoa-touch nsstring nserror