2010-06-12 7 views
0

Je travaille sur une application de la carte, dans ce que j'aime laisser tomber les broches (comme dans les applications Zillow) lorsque l'utilisateur jamais changer la vue de la carte. J'utilise le code suivant. J'essaye de charger les données de xml du serveur using NSAutoreleasepool pour faire l'analyse de xml dans le fil de fond.application se plantage lors de l'utilisation NSAutoreleasePool à l'intérieur méthode MKMapview regionDidChangeAnimated

  • (void) Mapview: (MKMapView *) Mapview regionDidChangeAnimated: (BOOL) animé {

    NSLog (@ "dans la région ne change");

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

}

Le code ci-dessus fonctionne bien, mais une fois que je l'ai changé le MapView, le appllication get écrasé. Tout le monde peut m'aider à résoudre le problème?

merci d'avance.

Répondre

0

urlString est déjà autoeleased lorsqu'il est renvoyé par stringWithFormat. Puisque vous utilisez urlString dans callParsing qui est exécuté sur un thread différent, vous devez le passer en tant qu'objet à cette méthode. Sinon, vous risquez qu'il soit libéré avant que la méthode callParsing ne soit exécutée et ne cause le plantage:

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

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