0

まず、私はiOSDevとObjective-Cを初めて使用します。ですから、愚かな質問やコードは許してください。

私はiPhoneで位置情報サービスをテストしてきました。NSTimerによって起動される次のコードがあります。

- (void)startLocationTracking
{

  if(self.locationManager==nil){
    _locationManager=[[CLLocationManager alloc] init];

    _locationManager.delegate=self;

    _locationManager.desiredAccuracy=kCLLocationAccuracyBest;

    _locationManager.distanceFilter=1;

    self.locationManager=_locationManager;

  }

if([CLLocationManager locationServicesEnabled]){

    [self.locationManager startUpdatingLocation];

  }

}

そして、これが私のロケーションマネージャー機能です:

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

[self timerLog];

NSString *deviceID = [self getUUID];

double lat = newLocation.coordinate.latitude;
double lon = newLocation.coordinate.longitude;
double alt = newLocation.altitude;
double dir = newLocation.course;
double spd = newLocation.speed;
double ha = newLocation.horizontalAccuracy;
double va = newLocation.verticalAccuracy;

NSDateFormatter *formatter;
NSString        *ts;

formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];

ts = [formatter stringFromDate:[NSDate date]];   

[self geoTrackingWS :deviceID :lat :lon :alt :dir :spd :ha :va :ts];

[manager stopUpdatingLocation];

}

何らかの理由で、私の関数geoTrackingWSはランダムに複数回起動しています。NSTimerは(テストとして)1分ごとに実行されており、正常に動作する場合もあれば、geoTrackingWS1回だけ呼び出す場合もありますが、2〜3回ヒットする場合もあります。

ロギングを実行しましたが、NSTimerが正常に動作し、正常に起動していることがわかります。

自分の携帯電話の別のアプリケーションと関係があるように感じますが、よくわかりません。

これに関するヘルプや洞察は素晴らしいでしょう。

ありがとう

4

2 に答える 2

1

タイマーから-startLocationTrackingを呼び出すと、新しいCLLocationManagerインスタンスを複数回作成したくない場合があります。コードの外観から、-startLocationTrackingを1回だけ呼び出すと、ロケーションAPIは、新しい情報があるときにデリゲート(自分で指定した)にメッセージを送信します。デリゲートパターンの理解を更新し、CLLocationManagerを使用するためのサンプルコードを確認することをお勧めします。それがお役に立てば幸いです。

于 2013-01-21T23:53:24.320 に答える
1

ロケーションマネージャーには通常、次のような複数の方法で現在地を特定できます。

  • セルタワーの三角測量;
  • Wi-FiネットワークID;
  • GPS。

最初のものは最も正確ではありませんが、取得するのが最も簡単です。2番目は通常より正確ですが、理解するのに時間がかかります(ルックアップのネットワーク要求があるため)。最後のものは最も正確ですが、理解するのにかなりの時間がかかる場合があります。アウト(衛星の検索など)。

その結果、ロケーションマネージャは、実行されている時間が長くなるほど、より正確な結果で応答することが期待されます。たとえば、マップを実行すると、その結果を確認できます。通常、非常に広い領域にすばやくピン留めされ、より正確な見積もりを取得するのに時間がかかります。

于 2013-01-22T00:06:34.003 に答える