The problem may be that the NSOperationQueue releases your NSOperation
once the main method ends. If you don't retain it elsewhere, the
parser tries to fire delegate methods on a released object. Sounds
like you need to make your NSOperation concurrent (which, IMHO, is a
misnomer).
You move what's currently in main a to a start method, override
isConcurrent to return YES, and implement the parser's delegate
methods. When parsing is complete, change some flags and and send KVO
notifications. That way, the queue won't release the operation until
it's truly complete.