此份文件為個人學習事件驅動XML程式的翻譯,內文請參考蘋果官方文件,若有翻譯錯誤請見諒,請勿挪作商業用途,並著明出處。
當parser在XML文件中遇到語法的錯誤或任何其他的問題使之無法形式完善(well-formed),它會停止解析並且傳送一個訊息到它的委任。如果該委任有實作
表一顯示如何實作
表一:處理解析錯誤。
在這範例中的關鍵行是建構NSAlert物件的資訊文本。這份文本包含了錯誤碼(一個NSXMLParserError enum常數)、一個局部化的錯誤描述和獨立在XML文件內錯誤的位置的一列數字與一欄數字(巢狀層級)。在範例中,委任從兩個不同的來源獲得這資訊:從parser物件本身(由該方法的第一個引數)或是由第二個引數提供的NSError物件。從parser物件,它也能得到一個NSError物件,從此物件可以得到一個局域化的描述。
然而,預設的NSError局域化描述是是最根本的(rudimentary),你可能想要提供你自己的局域化描述而不是依靠由NSError物件獲得的描述。有時解析錯誤會希望一個應用導向(application-specific)的解釋。為此目的實作一個函數或方法,你可以使用NSXMLParserError常數定義錯誤來決定在
當parser在XML文件中遇到語法的錯誤或任何其他的問題使之無法形式完善(well-formed),它會停止解析並且傳送一個訊息到它的委任。如果該委任有實作
parser:parseErrorOccurred:方法,那它就會接收這個訊息,在它的實作中,應該要顯示通知使用者是什麼問題的訊息。解析錯誤是致命的(亦即,不可復原的),通知使用者是你唯一可以做的事情(好難翻)。有了這個資訊,使用者就可能可以修好XML,讓文件能成功解析。
Well-formed: 表示遵守文法
表一顯示如何實作
parser:parseErrorOccurred:
方法。表一:處理解析錯誤。
- (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文件內錯誤的位置的一列數字與一欄數字(巢狀層級)。在範例中,委任從兩個不同的來源獲得這資訊:從parser物件本身(由該方法的第一個引數)或是由第二個引數提供的NSError物件。從parser物件,它也能得到一個NSError物件,從此物件可以得到一個局域化的描述。
然而,預設的NSError局域化描述是是最根本的(rudimentary),你可能想要提供你自己的局域化描述而不是依靠由NSError物件獲得的描述。有時解析錯誤會希望一個應用導向(application-specific)的解釋。為此目的實作一個函數或方法,你可以使用NSXMLParserError常數定義錯誤來決定在
NSLocalizedString macro要使用那個custom鍵。(當然,你也必須創建一個字串(strings)檔並且做任何必要的事情去國際化你的應用程式)
留言
張貼留言