2012-03-29 25 views
7

MKMapViewのプロパティをsetShowsUserLocationに設定して現在のユーザーの位置を表示しようとしています。YESです。デフォルトでは、アプリケーションがユーザーの場所の更新を開始すると、iPhoneの画面の左上に矢印が表示されます。しかし、現在の位置を表示した後、矢印は消えますが、アプリケーションが実行されている間はまだ表示されますバックグラウンドで場所を更新しますか?だから私は現在の場所の更新を停止することができますか?私はあなたがあなたのケースについては場所のマネージャー[self.locationManager stopUpdatingLocation];MKMapViewで現在のユーザーの場所を表示しますか?

にメッセージを送信することにより、場所の更新を停止することができ、あなたは、ユーザーの場所の表示を停止しようとしたのですか?...

答えて

15

マップが表示され、showUserLocationがYESに設定されている場合、マップはバックグラウンドで更新を続けます。

ビューが表示されなくなったりアプリケーションがバックグラウンドになったりすると、この設定を解除する必要があります。最も良い方法は、おそらくUIApplicationDidEnterBackgroundNotificationUIApplicationDidBecomeActiveNotificationの通知を受けるためにあなたのviewControllerを登録することでしょう。

- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appToBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification object:nil]; 
} 

その後、この通知によって呼び出されるメソッドでは、userLocationに関するマップビューのプロパティを変更します。これらのメソッドが実際に呼び出されること

- (void)appToBackground{ 
    [mapview setShowsUserLocation:NO]; 
} 

そして

- (void)appReturnsActive{ 
    [mapview setShowsUserLocation:YES]; 
} 

チェックをブレークポイントを設定することにより、そこに戻り、ホーム画面に戻ります。

+2

私はこの方法を使っていますが、 '[MKMapView(UserPositioning)stopUpdatingUserLocation]'は[MKMapView(UserPositioningInternal)removeUserLocation]を呼び出してSIGSEGVを爆発させます。あなたはこれを見た/解決したとは思わない? –

+0

'viewDidUnload'はいつオブザーバーを削除する必要がありますか? – Raptor

+1

@MichaelKernahan私は同じ問題を抱えています。あなたは解決策を見つけましたか? – horsejockey

0

をすぐに呼び出されるデリゲートを実装していますか

+0

私はそれを停止した場合、注釈(場所)も隠します – hemant

+0

'CLLocationManagerDelegate'を実装しようとすると、CoreLocation Frameworkをより良く管理できます。 ここでは、良いスタートチュートリアルを見つけることができます:http://www.switchonthecode.com/tutorials/getting-your-location-in-an-iphone-application –

1

私はMichael Kernahanに同意します。私は確かに競争状態がMKMapViewの中にあると確信しています。

MKMapViewは、ロケーションサービスへのアクセスが失われたことを認識するとすぐにuserLocationAnnotation(青色の点)を単独で削除しようとしています。

ただし、保護されていないようだと、開発者はまた、[mapView setShowsUserLocation:NO]を発行した場合、原因でMKMapViewの内部userLocationAnnotationを削除しようとしているスレッド、および呼び出しているスレッド間のレースでクラッシュを取得する可能性が非常に高いですsetShowsUserLocation:NO

+0

合意。これは特にiOS 7.xでは問題と思われます。私はまだ8.xでそれを見たとは思わない。 – Kevin

関連する問題