4

私は地図アプリケーションに取り組んでいます。

メソッドを使用[locationManager stopUpdatingLocation];して位置情報サービスを停止しようとしています。

iOS4.3では問題なく動作しているようですが、iOS5では動作しません。

iOS5で位置情報サービスを停止する方法を教えてください。

4

2 に答える 2

13

場合によっては、ロケーションマネージャが後も停止しないことがありstopUpdationLocationsます。

そのセットについては、ロケーションマネージャーを解放する必要があります。

locationManager = nil;

これは後に書く必要があります:

[locationManager stopUpdatingLocation];

また、locationManagerオブジェクトをnilに設定した後は呼び出さないように注意してください。呼び出さないと、アプリケーションがクラッシュします。

それでも位置情報サービスが停止しない場合は、回避策があります。今後使用したくない場合は、BOOL変数を使用してください。

于 2012-12-24T06:31:25.893 に答える
5

以下の 2 つのリンクからヘルプが得られる場合があります。

リンク-1:

http://iphonedevsdk.com/forum/iphone-sdk-development/2299-cllocationmanager-stopupdatinglocation-not-working.html

上記のリンクで site_reg の回答を参照してください。

私は同じ問題を抱えていました.mファイルで静的BOOLを宣言し、didUpdateToLocationメソッドに入ったときにそれをチェックすることで修正されたようです。

@implementation MyFile
@synthesize MySynth;
static BOOL haveAlreadyReceivedCoordinates = NO;

次に、 didUpdateToLocation メソッドで:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    if(haveAlreadyReceivedCoordinates) {
        return;
    }
    haveAlreadyReceivedCoordinates = YES;
    ...
}

これにより技術的に更新の受信が停止されることはありませんが、最初の更新以降は無視されます。アプリが機能を実行するために 1 つの位置情報更新を取得することに依存している場合は、これが役立ちます。

編集-1:

また、これが完了したら、locationManager.delegate = nil;後に[locationManager stopUpdatingLocation];行を追加できます。

リンク-2:

self.locationManager stopUpdatingLocation が位置情報の更新を停止しない理由

上記のリンクで jnic の回答を参照してください。

startMonitoringSignificantLocationChangesis not の反対はstopUpdatingLocation、 it is stopMonitoringSignificantLocationChangesです。

重要な場所の変更のみを監視する特別な理由がない限り、より定期的な更新のためにに置き換えること startMonitoringSignificantLocationChangesを お勧めします。startUpdatingLocation

詳細については、CLLocation のドキュメント を参照してください。

提供されたリンクが将来ダウンした場合でも、その回答が役立つことを確認するために、リンクから回答を追加しました。

于 2012-12-24T06:38:10.660 に答える