1

my を初期化してを呼び出すgetLocationメソッドがあります。ユーザーの位置を取得したら、 を呼び出します。CLLocationManagerstartUpdatingLocationstopUpdatingLocation

その後、ユーザーが更新を押すと、ユーザーの最新の場所を取得できるように呼び出すメソッドreloadDataを呼び出します。getLocationただし、これはlocationManager:didUpdateToLocation:fromLocation メソッドを呼び出すことはありません..そのため、ユーザーの最新の場所を取得することはありません。問題は何ですか?

-(void) getLocation {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
}

- (void) locationManager: (CLLocationManager *)manager 
 didUpdateToLocation: (CLLocation *)newLocation
        fromLocation:(CLLocation *)oldLocation
{
    if (oldLocation!= nil) { // make sure to wait until second latlong value
        [self setLatitude:newLocation.coordinate.latitude];
        [self setLongitude: newLocation.coordinate.longitude];
        [self.locationManager stopUpdatingLocation];
        self.locationManager.delegate = nil;
        self.locationManager = nil;
        [self makeUseOfLocationWithLat:[self getLatitude] andLon:[self getLongitude]];
    }
}

-(void) reloadData {
    [self getLocation];
}
4

3 に答える 3

1

これをテストしている間に移動しますか?コールバックは次の場合にのみトリガーされると思います。

  • あなたが呼ぶstartUpdatingLocation
  • あなたの場所が変わります
  • ロケーションマネージャーはより良い結果を得る(より詳細)

だから私はあなたのユースケースについて考えます:あなたが移動しないので、コールバックlocationManager:didUpdateToLocation:fromLocation:はあなたがリフレッシュを押した後に一度だけ呼び出されます、そして古い場所がないのであなたはifケースに入りません。

もう1つ、クラスにはCLLocationManagerを1つだけ含める必要があります。プロジェクト/アプリケーションごとに1つだけ使用します(シングルトンでラップされています)。これが好ましい方法です!また、これはoldLocation値を保持するので、これを変更することで問題を解決できると思います。

最高の、クリスチャン

于 2012-07-12T08:50:28.597 に答える
1

新しい CLLocationManager を割り当てることは本当に必要ですか? 一度だけ割り当ててみて(たとえば、initで)、必要に応じてstartUpdatingLocationとstopUpdatingLocationを呼び出してください。私にとって、このソリューションはうまく機能します。

于 2012-07-12T08:13:12.250 に答える
0

これを試すことができます。これは、ページを開くたびに更新するのに役立ちます.viewdidloadにstartUpdatingLocationを配置すると、初めてロードされるだけです

-(void)viewWillAppear:(BOOL)animated
{
    [locationManager startUpdatingLocation];
}
于 2012-07-26T06:03:07.920 に答える