This is a copy-paste of a question I asked on StackOverflow < http://stackoverflow.com/questions/5132266/nsxmlparser-error-code-changes-after-abort>, which hasn't gotten any answers. I'm still curious about it and hoped I might get a response on this list; apologies to anyone who is reading it twice now.
I'm using an NSXMLParser on some data that I request from a server on the net. It's possible that one of the arguments to the request is not to the server's liking, and it will return some XML with an Error element. In that case, I present the server's error text in an alert sheet, so the user has some idea what may have gone wrong. My parser delegate facilitates this by saving the contents of the ErrorMessage element that the parser finds, and then calling [parser abortParsing] The error code that results from this is supposed to be code 512, NSXMLParserDelegateAbortedParseError, and, indeed, when my delegate implements: - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"Parse Error Code: %d", [parseError code]); } I see 512 in the log. So far, so good. Now, my parser delegate returns the result of [parser parse] to my controller. The controller checks that result, and if it's NO, it checks the code in the error pointer that it passed, to see if failure was due to the delegate aborting: // In MyParserDelegate.m - (BOOL)parseData:(NSData *)data intoDict:(NSMutableDictionary *)dict errPtr:(NSError **)errPtr { // ... BOOL successful = [xmlParser parse]; if( !successful && (errPtr != NULL) ){ *errPtr = [parser parserError]; NSLog(@"Delegate: Parser Error Code: %d", [*errPtr code]); // Should be 512 after abort? Is actually 1... } return successful; } // In MyController.m BOOL successful = [parserDelegate parseData:data intoDict:dict errPtr:&error]; if( !successful ){ NSLog(@"Controller: Parse Error Code: %d", [error code]); // Should be 512 after abort? Is actually 1... } I expect this to be the same code 512, but it turns out that it is code 1, NSXMLParserInternalError! I'd like to figure out what's going on here so I don't end up trying to present an error in the wrong circumstances. The obvious ways around this are to either post a notification or implement a flag (which I did) in the delegate so it knows when it aborted, and can construct its own NSError to return in place of the actual parserError. I'm just trying to understand why the error code changes like this. Is the delegate supposed to do something in parseErrorOccurred: to tell the parser that it should hold onto the AbortedParseError? (The only Sample Code that checks for that error also ignores it.) Also, not knowing the circumstances that would otherwise cause an NSXMLParserInternalError (Apple's description of it is so wonderfully eloquent), I would like to avoid catching it when I didn't mean to. Can anyone enlighten me, particularly on the question of the code change? _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com