Обработка ошибок анализа
Когда синтаксический анализатор встречается с синтаксической ошибкой или любой другой проблемой в XML-документе, препятствующем тому, чтобы он был правильно построен, это прекращает анализировать и отправляет сообщение своему делегату. Делегат, если это реализует parser:parseErrorOccurred:
метод, получает это сообщение. В его реализации это должно вывести на экран сообщение, сообщающее пользователям, какова проблема. Ошибка анализа является фатальной (т.е. неисправимой), настолько сообщающий, что пользователь - все, что можно реалистично выполнить. С этой информацией пользователь мог бы быть в состоянии фиксировать XML, таким образом, может быть успешно проанализирован документ.
Перечисление 1 иллюстрирует, как Вы могли бы реализовать parser:parseErrorOccurred:
.
Перечисление 1 , Обрабатывающее ошибки анализа
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { |
NSWindow *modWin = [self windowForSheet]; |
if (!modWin) modWin = [NSApp mainWindow]; |
NSAlert *parserAlert = [[NSAlert alloc] init]; |
[parserAlert setMessageText:@"Parsing Error!"]; |
[parserAlert setInformativeText:[NSString stringWithFormat:@"Error %i, |
Description: %@, Line: %i, Column: %i", [parseError code], |
[[parser parserError] localizedDescription], [parser lineNumber], |
[parser columnNumber]]]; |
[parserAlert addButtonWithTitle:@"OK"]; |
[parserAlert beginSheetModalForWindow:modWin modalDelegate:self |
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) |
contextInfo:nil]; |
[parserAlert release]; |
} |
- (void)alertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(void *)contextInfo { } |
Ключевая строка в этом примере является той, создающей информативный текст объекта NSAlert. Этот текст включает код ошибки ( NSXMLParserError
enum
постоянный), локализованное описание ошибки, и номер строки и столбец (уровень вложенности) число, изолирующее расположение ошибки в XML-документе. В примере делегат получает эту информацию из двух других источников: от самого объекта синтаксического анализатора (предоставленный в первом параметре метода) или от объекта NSError обеспечил во втором параметре. От объекта синтаксического анализатора это может также получить объект NSError, и от которого это может получить локализованное описание.
Однако локализованное описание значения по умолчанию NSError является элементарным. Вы могли бы хотеть предоставить свое собственное локализованное описание вместо того, чтобы полагаться на то, полученное из объекта NSError. Иногда ошибки анализа могут потребовать специализированной интерпретации. Для реализации функции или метода с этой целью можно использовать NSXMLParserError
постоянное определение ошибки определить, который пользовательский ключ использовать в NSLocalizedString
макрос. (Конечно, необходимо также создать a strings
файл и делает то, что необходимо для интернационализации приложения.)