在我的应用程序中,我正在后台线程中从服务器下载XML数据,并进行解析和更新数据库表

后台线程将在应用程序启动期间创建并保持运行。

但是问题出在NSXMLParser Object发布期间,我得到EXC_BAD_ACCESS(SIGSEGV)
这是XML解析器代码:

    - (void)parseXMLWithData:(NSMutableData *)pObjXMLBufferPtr
    {
        @try
        {
             [[NSURLCache sharedURLCache] setMemoryCapacity:0];
            [[NSURLCache sharedURLCache] setDiskCapacity:0];

            NSMutableData   *lTempData = [pObjXMLBufferPtr copy];
             NSXMLParser *lObjXMLParserPtr = [[NSXMLParser alloc] initWithData:lTempData];
            [lTempData release];

           [pObjXMLParserPtr setShouldResolveExternalEntities: YES];
           [pObjXMLParserPtr setDelegate: m_cObjSAXHandler];
           //m_cObjSAXHandler is my custom class. here is declaration SAXHandler :
           NSObject<NSXMLParserDelegate>
          [pObjXMLParserPtr parse];

            [lObjXMLParserPtr setDelegate:nil];
            [lObjXMLParserPtr release];
            lObjXMLParserPtr = (NSXMLParser *)nil;
        }
        @catch (NSException *ex)
        {
               NSLog(@"parseXMLWithData Exception!!!");
        }
    }

Here is the crash log:
0   libicucore.A.dylib              0x34c00578 ucnv_close + 28
1   libxml2.2.dylib                 0x342a81ba xmlCharEncCloseFunc + 30
2   libxml2.2.dylib                 0x342c62d0 xmlFreeParserInputBuffer + 28
3   libxml2.2.dylib                 0x342aacbc xmlFreeInputStream + 108
4   libxml2.2.dylib                 0x342aace4 xmlFreeParserCtxt + 12
5   Foundation                      0x37d14b22 -[NSXMLParser dealloc] + 158


请帮助我解决此问题。

最佳答案

您要释放解析器并在parse方法之后设置其委托nil。
解析也在内部进行,因此您必须等待解析结束。

您可以在parserDidEndDocument方法中设置某些通知或调用方法以释放解析器。

希望这可以帮助。

10-08 08:59