2010-10-19 7 views
1

J'ai des épingles que l'utilisateur peut ajouter. Dans la légende, il y a un bouton. Lorsque l'utilisateur appuie sur le bouton, je veux une nouvelle broche à cet endroit, et je veux me débarrasser de la broche que l'utilisateur a appuyé (différents types de broches).Impossible de supprimer des annotations

Fondamentalement, la première broche est draggable, et lorsque l'utilisateur a trouvé un emplacement approprié, ils vont le "verrouiller". (la broche verrouillée agit différemment de quelques façons, c'est pourquoi j'ai besoin de remplacer l'ancienne broche)

de toute façon, c'est la méthode par laquelle je fais mon traitement. Quand j'arrive à la [mapView removeAnnotation: view.annotation]; tout ce que je reçois est "Signal reçu par le programme:" EXC_BAD_ACCESS "."

Quelqu'un peut-il m'aider ici? (Le problème n'est pas que la nouvelle annotation n'apparaisse pas, comme cela apparaît, le problème est que l'ancienne annotation ne disparaît pas). EDIT: Code fixe selon la suggestion.

- (void) mapView:(MKMapView *)MapView 
     annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control { 
    LockedPotholeAnnotation *annotation = [[[LockedPotholeAnnotation alloc] initWithCoordinate:view.annotation.coordinate addressDictionary:nil]autorelease]; 
    NSString *titleString = [NSString stringWithFormat:@"Pothole at %.4f, %.4f", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude]; 
    annotation.title = titleString; 
    [mapView addAnnotation:annotation]; 
    //[annotation release]; 
    NSLog(@"Added Pin"); 
    NSLog(@"VA: %@", [view.annotation class]); 
    [mapView removeAnnotation:view.annotation]; 
    //[mapView removeAnnotations:mapView.annotations]; 
    [mapView setNeedsDisplay]; 
} 

Répondre

1

Cela peut ne pas être la seule chose, mais la première chose qui saute est que vous autorelease l'annotation sur la ligne où vous alloc il. Par conséquent, vous ne devriez pas aussi release après l'avoir ajouté à mapView. En l'état actuel des choses, l'annotation sera vraisemblablement désaffectée prématurément lorsque le pool d'autorelease sera drainé - et si ce n'est pas exactement à ce moment-là, alors à un point ultérieur qui est encore prématuré. La vue de la carte sera bloquée avec un pointeur éventé et une flèche.

Je ne sais pas pourquoi cela se manifesterait tout à fait dès que vous décrivez, donc il peut y avoir quelque chose d'autre aussi ...

+0

Ahh je peux voir l'erreur. Mis à part cela, je ne semble pas avoir de problème avec la nouvelle annotation. la nouvelle annotation "verrouillée" apparaît, mais l'ancienne ne disparaît pas, et c'est en fait le problème. –

+0

@DJ Dans ce cas, il est difficile de dire - le code ne semble pas manifestement faux, donc le problème pourrait être ailleurs. Vérifiez que la valeur passée dans 'view' est bien la bonne et que' view.annotation' est dans le tableau 'annotations' de la vue de carte avant d'essayer de supprimer. Est-ce que le retrait fonctionne si vous le faites * avant * l'ajout de la nouvelle annotation? Si vous n'en ajoutez pas du tout? Que se passe-t-il lorsque vous supprimez tout, comme dans la ligne commentée? Etc - désolé je ne peux pas suggérer quelque chose de plus utile que la corvée de débogage de base ... – walkytalky

+0

Il s'avère que l'endroit d'origine où j'ai ajouté des annotations, j'ai également eu cette version supplémentaire là-bas. Qui l'a vissé quand j'ai essayé d'enlever cette annotation. Supprimer cette ligne l'a corrigé. Merci beaucoup. –

Questions connexes