1

アプリ内でコアロケーションフレームワークを使用しています.didUpdateToLocationメソッドは、アプリが最初に起動したときに2回呼び出されます。ロケーションマネージャーインスタンスを割り当てて開始し、startUpdatingLocationを呼び出しました。そして、didUpdateToLocationで、現在の緯度と経度をサーバーに送信している別の関数を呼び出しているので、この関数の複数の呼び出しを回避するにはどうすればよいですか?

- (void)viewDidLoad
{
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
[self.mapView setShowsUserLocation:YES];
if( [CLLocationManager locationServicesEnabled])
{
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.delegate = self;
    [locationManager startUpdatingLocation];
    locationManager.distanceFilter = 1000.0f;

else
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"GPS Disabled"          message:@"Enable GPS settings to allow the application to search for your current location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
    [alertView release];
}
}

  //Here is didUpdateToLocation method

 -(void)locationManager:(CLLocationManager *)manager
 didUpdateToLocation:(CLLocation *)newLocation
      fromLocation:(CLLocation *)oldLocation
   {
  self.lat = newLocation.coordinate.latitude;
  self.longi = newLocation.coordinate.longitude;

    NSLog(@"Updated Location : lat--%f long--%f",self.lat,self.longi);
   [self updateUserLocation];



  }

  //in this function i am sending the latitude and longitude to server.
 -(void)updateUserLocation
 {

   NSString *urlString = [[NSString stringWithFormat:@"http://appifylabs.com/tracemybuddies/index.php/iphone/updateUserLocation/?userId=1&latitude=%@&longitude=%@",self.lat,self.longi] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

[conn url_Connection:urlString withActivityView:self.activityView     withParentView:self.view];
  }
4

2 に答える 2

1

didUpdateToLocation内で、oldLocationがNULLとして受信されると、関数から戻ります。デリゲートが最初に呼び出されるときはNULLになります。

次に、currentTimeとnewLocation.timeStampのタイムスタンプの差をとることができます。許容範囲内にない場合は、関数から戻ります。

于 2012-06-15T12:30:20.843 に答える
0

たぶん、特定の時間間隔が経過した場合にのみサーバーを呼び出す必要がありますか?

int now = (int)[[NSDate date] timeIntervalSince1970];

if(now - self.lastUpdate > INTERVAL_BETWEEN_TWO_UPDATES) {  
    [self callServeur];
    self.lastUpdate = now;
}
于 2012-06-15T12:08:44.193 に答える