您好我正在我的应用中实施位置服务。首先,我必须知道我的坐标,以获得列表中的某些地方与设备之间的距离。然后,如果我进入一个地方,我可以办理登机手续,所以,我需要再次获得坐标,问题就在这里。第二次尝试获取坐标时,方法-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
未被调用..我无法获得新的坐标。
我的经理位于NSObject sublcass中,代码如下:
(id)init {
if ( self = [super init] ) {
if ([CLLocationManager locationServicesEnabled])
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager startUpdatingLocation];
}
}
return self;
}
-(void) checkLongLatitudeAgain {
[locationManager startUpdatingLocation];
}
#pragma mark Delegates de CLLocationManager
//
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
NSLog(@"LON%f", manager.location.coordinate.longitude);
NSLog(@"LAT:%f", manager.location.coordinate.latitude);
NSTimeInterval howRecentNewLocation = [newLocationeventDate timeIntervalSinceNow];
if (manager.location.horizontalAccuracy <= 100.0 && howRecentNewLocation < -0.0 && howRecentNewLocation > -20.0){
//Usar coordenada
[self.delegate getLocationForCheckIn:manager.location];
[self stopUpdatingLocation:@"Fins"];
}
}
// ---------------------------------------------------------------------------------------------------------------------
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
//
if ([error code] != kCLErrorLocationUnknown) {
[self stopUpdatingLocation:NSLocalizedString(@"Error", @"Error")];
}
//
}
// ---------------------------------------------------------------------------------------------------------------------
- (void)stopUpdatingLocation:(NSString *)state {
//Detenemos la lectura del GPS
[locationManager stopUpdatingLocation];
locationManager.delegate = nil;
NSLog(@"Stop gps");
//
}
我在打开地点列表时调用该类,并且当在一个地方内部时,用户按下checkIn按钮。这两次都是用这段代码完成的:
WPLocationManager *location = [[WPLocationManager alloc]init];
[location checkLongLatitudeAgain];
答案 0 :(得分:4)
您每次都在创建新经理:
WPLocationManager *location = [[WPLocationManager alloc]init];
[location checkLongLatitudeAgain];
新经理未分配给任何代表。
您需要使用您创建并分配给代理人的上一个管理员,例如:
[locationManager checkLongLatitudeAgain];
答案 1 :(得分:0)
您可以查看http://developer.apple.com - https://developer.apple.com/library/ios/documentation/userexperience/conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html
上的文档您可以查看启动标准位置服务和启动重要更改位置服务部分。您必须使用CLLocationManager的startMonitoringSignificantLocationChanges或startUpdatingLocation方法,在某处缓存您的位置并仅在收到新位置时更新它,否则就像文档中所述:“如果已经提供了位置更新,您还可以获得直接来自CLLocationManager对象的最新位置数据,无需等待传递新事件“。
答案 2 :(得分:0)
我不知道你为什么再次启动你的位置经理,即使你有一些如何设法解决当前的问题,但这不是处理基于位置管理的应用程序的正确方法。我以前在工作时遇到了麻烦基于位置的应用程序。基于位置的应用程序的最佳方法是单例。 apple forum discussion
你可以找到 this 和this非常有帮助。只是一个建议,:) 感谢。
答案 3 :(得分:0)
在iOS8中对我来说,我必须在致电[locationManager stopUpdatingLocation];
之前致电[locationManager startUpdatingLocation]
以便第二次开始获取更新,这对我有用。