performSelectorInBackground错误调试

时间:2011-02-21 11:11:05

标签: iphone objective-c multithreading

我是iPhone线程编程的新手,我有点失落。

我有一个函数解析XML并生成一个在主背景上工作正常的对象数组,但我需要在后台执行,所以我调用performSelectorInBackground,但调试器抛出一个EXC_BAD_ACCESS,我试图调试它但它崩溃了在不同的点,当我运行仪器以获取内存泄漏时,应用程序不会崩溃。

有关调试我的应用的任何建议吗?

提前致谢。


我已经改变了但是错误仍在继续。 EXC_BAD_ACCESS在NSXMLParserDelegate中抛出,我使用NSLog跟踪它,每行执行不同的编号,每次执行都会在不同的行中崩溃...

我完全失去了


您对共享资源的意思是什么?例如XML文件?

这是在后台运行的代码。

NSAutoreleasePool *arPool = [[NSAutoreleasePool alloc] init];

    //Cargamos las noticias desde el servidor.
    NSString *metadataPath = [[NSBundle mainBundle] pathForResource:@"classes" ofType:@"xml"];
    RESTXML *restXML = [[RESTXML alloc] initWithXMLMetadata:metadataPath];  

    NSString *testXMLPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
    NSData *xmlData = [NSData dataWithContentsOfFile:testXMLPath];
    NSMutableArray *latestNews = [(NSMutableArray*)[restXML REST2Object:@"doc" andXML:xmlData] retain];

    [self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:NO];

    [arPool release];

你能指点我一些关于iPhone中互斥的文档吗?

非常感谢你的时间

2 个答案:

答案 0 :(得分:1)

如果您正在使用多个线程,请确保已为访问线程之间共享资源的所有位置添加了互斥锁(使用@synchronize关键字)。

答案 1 :(得分:1)

您可以尝试更改该行:

[self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:NO];

[self performSelectorOnMainThread:@selector(uploadTableData) withObject:nil waitUntilDone:YES];

如果您的表视图访问在您的线程中创建的数据。