问题描述
||
我的应用程序中有一个简单的isEqualToString测试,由于某种原因,尽管控制台显示它应该采用真实路径,但它始终采用if语句的错误路径。
这是有问题的代码:
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
NSLog(@\"Program requestFailed with error \'%@\' and reason \'%@\'\",[error localizedDescription],[error localizedFailureReason]);
Nsstring *errorMessage = [Nsstring stringWithFormat:@\"%@\",[error localizedDescription]];
if ([[error localizedFailureReason] isEqualToString:@\"(null)\"])
{
}
else
{
errorMessage = [errorMessage stringByAppendingFormat:@\"\\nReason: %@\",[error localizedFailureReason]];
}
[Utils msgBox:@\"Error with Data Download\" message:errorMessage];
}
在控制台中:
2011-04-15 14:27:07.341 Program[79087:207] Program requestFailed with error \'The request timed out\' and reason \'(null)\'
2011-04-15 14:27:07.341 Program[79087:207] displaying a message Box with title \'Error with Data Download\' and message \'The request timed out
Reason: (null)\'
我的Utils类中的msgBox方法将标题和消息输出到控制台,控制台是第二行的来源。
我已经看了一段时间了,答案必须很简单,以免引起注意。有什么建议么? (我尝试将[error localizedDescription]的空白切掉,但无济于事。)我使用的是最新的4.3 iOS SDK。
解决方法
字符串不等于\“(null)\”字符串为nil,当打印到控制台时,该字符串打印为AS(空)。
将nil传递给
isStringEqual
总是返回false。
如果您需要检查nil,请将您的字符串与nil进行比较,而不是\“(null)\”。
if (error != nil)
{
errorMessage = [errorMessage stringByAppendingFormat:@\"\\nReason: %@\",[error localizedFailureReason]];
}
,在调试器中看到的“ 4”是调试器告诉您值实际上是“ 5”的方式。因此,您可能想尝试以下方法:
if ( ! [error localizedFailureReason] ) {
...
} ...