iPhone / iOS isEqualToString всегда возвращает false - PullRequest
3 голосов
/ 15 апреля 2011

У меня есть простой тест 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], но безрезультатно.) Я использую последний iOS SDK 4.3.

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

Строка не равна "(null)", строка равна nil, которая при печати на консоли печатается как AS (null).

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

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

if (error != nil)
{
    errorMessage = [errorMessage stringByAppendingFormat:@"\nReason: %@", [error localizedFailureReason]];
}
4 голосов
/ 15 апреля 2011

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

if ( ! [error localizedFailureReason] ) {
    ...
} ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...