iPhone / iOS的isEqualToString始终返回false

问题描述

|| 我的应用程序中有一个简单的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] ) {
    ...
} ...