在我的应用程序中,我正在后台线程中从服务器下载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
方法中设置某些通知或调用方法以释放解析器。
希望这可以帮助。