iPhone / iOS isEqualToString总是返回false

时间:2011-04-15 18:35:41

标签: ios ios4 nsstring

我的应用程序中有一个简单的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上。

2 个答案:

答案 0 :(得分:5)

字符串不等于“(null)”字符串为nil,打印到控制台时打印为AS(null)。

将nil传递给isStringEqual将始终返回false。

如果您需要检查nil,请将您的字符串与nil进行比较,而不是“(null)”。

if (error != nil)
{
    errorMessage = [errorMessage stringByAppendingFormat:@"\nReason: %@", [error localizedFailureReason]];
}

答案 1 :(得分:4)

您在调试器中看到的(null)是调试器告诉您值实际为nil的方式。所以你可能想尝试这个:

if ( ! [error localizedFailureReason] ) {
    ...
} ...