Обработка ошибок анализа

Когда синтаксический анализатор встречается с синтаксической ошибкой или любой другой проблемой в 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. Этот текст включает код ошибки ( NSXMLParserErrorenum постоянный), локализованное описание ошибки, и номер строки и столбец (уровень вложенности) число, изолирующее расположение ошибки в XML-документе. В примере делегат получает эту информацию из двух других источников: от самого объекта синтаксического анализатора (предоставленный в первом параметре метода) или от объекта NSError обеспечил во втором параметре. От объекта синтаксического анализатора это может также получить объект NSError, и от которого это может получить локализованное описание.

Однако локализованное описание значения по умолчанию NSError является элементарным. Вы могли бы хотеть предоставить свое собственное локализованное описание вместо того, чтобы полагаться на то, полученное из объекта NSError. Иногда ошибки анализа могут потребовать специализированной интерпретации. Для реализации функции или метода с этой целью можно использовать NSXMLParserError постоянное определение ошибки определить, который пользовательский ключ использовать в NSLocalizedString макрос. (Конечно, необходимо также создать a strings файл и делает то, что необходимо для интернационализации приложения.)