我有一个iOS应用程序巫婆使用用户的当前位置.我这样做:
-(void)startGeoloc{
NSLog(@"start geoloc");
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy=kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];
}
#pragma mark - CLLocationManagerDelegate methods
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
[locationManager stopUpdatingLocation];
AppDelegate *apDelegate =(AppDelegate *)[UIApplication sharedApplication].delegate;
apDelegate.modeGeoloc = YES;
[self callWebService:locationManager.location];
}
Run Code Online (Sandbox Code Playgroud)
问题是,我的方法callWebService:locationManager.location被调用两次,我只想称它为一次.我怎么能这样做?谢谢你的回答
Mik*_*das 11
要确保locationManager仅调用"didUpdate ..."方法一次,请使用BOOL来引用是否已找到该位置.
创建ivar BOOL:
@property BOOL didFindLocation;
Run Code Online (Sandbox Code Playgroud)在locationManager startUpdatingLocation之前,将新BOOL设置为NO.这样您就可以随意调用新的位置更新.
-(void) startFindingLocation {
self.didFindLocation = NO; // like this
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self]
[locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
[locationManager startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)在"didUpdateLocations"中,检查它.
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
if (!self.didFindLocation) {
self.didFindLocation = YES;
[locationManager stopUpdatingLocation];
// do the rest of your stuff
}
}
Run Code Online (Sandbox Code Playgroud)如果可能,请不要在代码中的任何其他位置设置didFindLocation以避免混淆.
| 归档时间: |
|
| 查看次数: |
4163 次 |
| 最近记录: |