Сбой приложения при использовании NSAutoreleasepool внутри метода MKMapview regionDidChangeAnimated - PullRequest
0 голосов
/ 12 июня 2010

Я работаю над приложением карты, так как мне нравится отбрасывать булавки (как в приложениях Zillow), когда пользователь меняет вид карты.Я использую следующий код.я пытаюсь загрузить данные XML с сервера, используя NSAutoreleasepool, чтобы выполнить анализ XML в фоновом потоке.

  • (void) mapView: (MKMapView *) mapView regionDidChangeAnimated: (BOOL) animated{

    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];
    

}

- (void) callParsing {

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

[self parseXMLFileAtURL:urlString];

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

[pool drain];

}

Приведенный выше код работает нормально, но как только я изменил вид карты, приложение потерпело крах.Кто-нибудь может помочь мне решить проблему?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2010

urlString уже автоматически выпущен, когда он возвращается из stringWithFormat.Поскольку вы используете urlString в callParsing, который выполняется в другом потоке, вы должны передать его как объект этому методу.В противном случае вы рискуете его освободить до выполнения метода callParsing, что приведет к сбою:

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

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