2009-08-10 6 views
3

Je suis en train de créer une application qui permet de suivre l'emplacement de l'utilisateur sur la carte. Je peux facilement insérer une épingle, mais lorsque l'emplacement est modifié, l'application se ferme.Problème lors du déplacement de MKPinAnnotation sur la carte iPhone

J'ai mis les coordonnées par défaut à 0,0 dans viewdidload: méthode et j'ai ajouté une broche à cet endroit. Je l'ai fait parce que je veux enlever la broche quand l'emplacement est mis à jour, puis insérez la broche à nouveau sur le nouvel emplacement.

Voici le code dans lequel j'ai écrit - (void) locationManager: didUpdateToLocation: fromLocation: method.

[mapview removeAnnotation:myannotation]; 
CLLocationCoordinate2D currentlocation; 
currentlocation.latitude=newLocation.coordinate.latitude; 
currentlocation.longitude=newLocation.coordinate.longitude; 

myannotation=[[[CSMapAnnotation alloc]initWithCoordinate:currentlocation annotationType:CSMapAnnotationTypeStart title:@"My Location"] autorelease]; 

[mapview addAnnotation:myannotation]; 

Ici, myannotation est la broche que je veux ajouter, newLocation est l'emplacement mis à jour et CSMapAnnotation retournera vue d'annotation.

Le problème est que mon application se bloque à chaque fois. J'ai été en mesure d'obtenir un message d'avertissement sur la console avant de s'écraser. Voici le message:

"Une instance 0x182020 de la classe CSMapAnnotation est désaffectée alors que des observateurs de valeur clé y sont encore enregistrés L'observation est en cours de fuite, et peut même être attachée par erreur à un autre objet."

Ainsi, plz aider si quelqu'un a dû faire face au même problème ...

Répondre

0

Je pense qu'il est de ne pas aimer votre tag autorelease pour myannotation, lorsque vous ajoutez l'annotation à la carte, il pourrait ne pas être étant retenue, et puis ça libère et crash, c'est ce que je peux penser en regardant le code que vous avez posté. Hope it helps

1

Quelques choses à regarder pour:

  • MKMapView a déjà un attribut showsUserLocation qui suit l'emplacement de l'utilisateur pour vous avec la chose bleu-point pulser. Si vous souhaitez définir séparément une épingle à cet emplacement, vous pouvez obtenir l'attribut userLocation à partir de la carte.

  • Le bug de plantage pourrait être dû à l'appel autorelease. Le moyen le plus facile de le réparer est de faire myannotation une propriété avec un attribut retain, puis sortez l'autorelease et au lieu de myannotation utilisez self.myannotation.

  • Pas vraiment clair ce que vous voulez dire en définissant "coordonnées par défaut à 0, 0". Si ce sont des lat/longs alors vous mettez une épingle à Greenwich, en Angleterre :-) Vous n'avez pas vraiment besoin d'ajouter et de supprimer des annotations en permanence. Vous pouvez les ajouter une fois puis ajuster leur position au besoin.

+0

thanx Ramin et Daniel ... J'ai fait ce que vous avez dit et maintenant il fonctionne heureusement ...! Je ne connaissais tout simplement pas la classe MKUserLocation. J'ai ajouté 3 lignes de code et il a résolu tous les problèmes. MKUserLocation * ulocation = [[MKUserLocation alloc] init]; [mapview setShowsUserLocation: TRUE]; [mapview addAnnotation: ulocation]; Merci à vous les gars et ce super site Web .. – Napster

+0

0, 0 n'est pas Greenwich, en Angleterre. Le premier méridien voyage à travers Greenwich, mais la latitude de zéro se déplace le long de l'équateur. 0, 0 est quelque part au milieu de l'océan. –

0

Je viens de rencontrer ce même problème et cela avait quelque chose à voir avec les coordonnées de l'annotation. J'ignorais déjà 0,0 mais pour une raison quelconque les utilisateurs entraient -180, -180 (peut-être à partir d'un appareil où nous ne pouvions pas déterminer l'emplacement?)

de toute façon - dès que j'ai commencé à ignorer -180, -180 la problème est parti. espérons que cela aide.

Questions connexes