3

地図上のユーザーの位置を追跡するアプリを構築しています。簡単にピンを差し込めるのですが、場所を変えるとアプリが終了してしまいます。

viewdidload: メソッドでデフォルトの座標を 0,0 に設定し、その場所にピンを追加しました。場所が更新されたときにピンを削除し、新しい場所にピンを再度挿入したいので、これを行いました。

これは私が -(void)locationManager: didUpdateToLocation:fromLocation: メソッドで書いたコードです。

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

ここで、myannotation は追加するピン、newLocation は更新された場所、CSMapAnnotation は注釈ビューを返します。

問題は、アプリが毎回クラッシュすることです。クラッシュする前に、コンソールに警告メッセージを表示できました。メッセージは次のとおりです。

「クラス CSMapAnnotation のインスタンス 0x182020 の割り当てが解除されていますが、キー値オブザーバーがまだ登録されています。観測情報が漏洩しており、誤って他のオブジェクトにアタッチされることさえあります。」

だから、誰かが同じ問題に直面しているなら、助けてください...

4

3 に答える 3

1

注意すべき点がいくつかあります。

  • MKMapView にはshowsUserLocation、パルス状の青い点でユーザーの位置を追跡する属性が既にあります。userLocationその場所に個別にピンを設定する場合は、マップビューから属性を取得できます。

  • クラッシュするバグは、autorelease呼び出しが原因である可能性があります。これを修正する最も簡単な方法はmyannotation、属性を使用してプロパティを作成し、使用するretain代わりに autorelease を削除することです。myannotationself.myannotation

  • 「デフォルトの座標を0、0に設定する」という意味がよくわかりません。これらが緯度/経度の場合、イギリスのグリニッジにピンを置いています:-) 注釈を継続的に追加および削除する必要はありません。それらを一度追加してから、必要に応じて位置を調整できます。

于 2009-08-10T18:53:47.340 に答える
0

myannotation の autorelease タグが気に入らないと考えています。注釈をマップに追加すると、保持されない可能性があり、割り当てが解除されてクラッシュするだけです。それが役に立てば幸い

于 2009-08-10T13:21:00.507 に答える
0

これと同じ問題が発生したばかりで、注釈の座標と関係がありました。私はすでに 0,0 を無視していましたが、何らかの理由でユーザーが -180、-180 を入力していました (場所を特定できなかったデバイスからでしょうか?)

とにかく - -180、-180 を無視し始めるとすぐに、問題は解決しました。お役に立てれば。

于 2011-05-07T00:40:51.710 に答える