在MKMapview中使用NSAutoreleasepool时应用程序崩溃regionDidChangeAnimated方法

问题描述:

我正在处理地图应用程序,因为我希望在用户更改地图视图时放弃引脚(如在Zillow应用程序中)。我正在使用下面的代码。我尝试使用NSAutoreleasepool从服务器加载xml数据在后台线程中执行xml解析。在MKMapview中使用NSAutoreleasepool时应用程序崩溃regionDidChangeAnimated方法

  • (无效)的MapView:(的MKMapView *)的MapView regionDidChangeAnimated:(BOOL)动画{

    的NSLog(@ “内部区域没有改变”);

    urlString =[NSString stringWithFormat: @"http://asdfasdasdf.com/asdfasdf/mapxml.php]; 
    
    [stories1 release]; 
    
    [mapview removeAnnotations:eventPoints1]; 
    
    eventPoints1 = [[NSMutableArray array] retain]; 
    
    [self performSelectorInBackground:@selector(callParsing) withObject:nil]; 
    

}

- (无效)callParsing {

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

[self parseXMLFileAtURL:urlString]; 

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

[pool drain]; 

}

上面的代码工作正常,但一旦我改变的MapView,所述appllication得到坠毁。任何人都可以帮我解决这个问题?

在此先感谢。

当从stringWithFormat返回时,urlString已经被自动释放。 由于您在另一个线程上执行的callParsing中使用urlString,因此应将其作为对象传递给该方法。否则,您可能会在执行callParsing方法之前将其释放,从而导致崩溃:

... 
[self performSelectorInBackground:@selector(callParsing:) withObject:urlString]; 
... 

-(void)callParsing:(NSString*)urlString { 
...