iPhone / iOS isEqualToString всегда возвращает false

#ios #ios4 #nsstring

#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)'
  

Метод MsgBox в моем классе Utils выводит заголовок и сообщение на консоль, откуда берется вторая строка.

Я смотрел на это некоторое время, и ответ должен быть настолько простым, чтобы он не привлекал внимания. Есть предложения? (Я пытался убрать пробелы [ошибка localizedDescription], но безрезультатно.) Я использую последнюю версию 4.3 iOS SDK.

Ответ №1:

Строка не равна «(null)», строка равна нулю, которая при выводе на консоль выводится КАК (null).

Передача nil в isStringEqual всегда возвращает false.

Если вам нужно проверить наличие nil, сравните вашу строку с nil, а не с «(null)».

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

Ответ №2:

(null) То, что вы видите в отладчике, — это способ отладчика сообщить вам, что значение на самом деле таково nil . Поэтому вы можете попробовать это вместо:

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