4

時間の経過とともにユーザーの場所を記録しようとしています。ユーザーが移動中の場合は正常に機能し、デリゲートメソッドdidUpdateToLocationが確実に呼び出されます。ただし、ユーザーが静止していてアプリがバックグラウンドで実行されている場合、しばらくするとデリゲートメソッドは呼び出されなくなります。再起動するには、アプリをフォアグラウンドで購入する必要があります。アクティブになると、デリゲートメソッドが再び確実に呼び出されます。

これは、CLLocationManagerオブジェクトがViewController内で宣言されていることが原因である可能性があると当初は考えていたため、AppDelegate内で宣言されるように変更しましたが、どちらも役に立ちませんでした。

また、distanceFilterプロパティを試してみましたが無駄になりました。現在、Viewコントローラー内から次のコードを使用して設定しています。オブジェクト自体は、AppDelegateオブジェクトで宣言および初期化されることに注意してください。

 app.locationManager.delegate = self;
    app.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    app.locationManager.distanceFilter = kCLDistanceFilterNone;
    [app.locationManager startUpdatingLocation];

他の誰かがこの問題に遭遇しましたか?任意のポインタをいただければ幸いです。私はこれに数日間苦労しています。

4

4 に答える 4

5

iOS 6では、CLLocationManagerプロパティpausesLocationUpdatesAutomaticallyが導入されています。ここで説明されているように、CLLocationManagerを設定するときにNOに設定する必要があります:http://www.stackoverflow.com/a/12781634/700769

于 2013-01-25T09:24:45.033 に答える
5

このコードをUpdateLocationメソッドに追加します

- (void) updateLocation{
    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    if ([CLLocationManager locationServicesEnabled]) {
        [locationManager startUpdatingLocation];       
    } else {
        NSLog(@"Location services is not enabled");
    }
}

また、Schemesの設定を編集します:Scheme / Edit Scheme / Options / Allow Location Simulationがチェックされていますが、デフォルトの場所が設定されていません。

于 2013-06-18T08:46:23.830 に答える
4

アプリのplistファイルでUIBackgroundModesに場所を追加する必要があります。

于 2013-01-24T14:05:15.517 に答える
1
if #available(iOS 9.0, *){
    locationManager.allowsBackgroundLocationUpdates = true;
}
于 2016-05-05T22:07:11.920 に答える