#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] ) {
...
} ...