当应用程序进入前台,核心位置,ios时,不会调用didUpdateLocations

时间:2014-04-15 16:34:21

标签: objective-c ios5 core-location viewwillappear

我的目标是每当应用程序进入前台时,我将获取位置以更新我的天气预报。我的工作是

- (void)viewDidLoad
{
    [super viewDidLoad];
     self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m

}
- (void)viewWillAppear:(BOOL)animated
{
    self.locationManager.delegate = self;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
}
#pragma mark - Click to get weather
-(void)enterForeground {
    [self.locationManager startUpdatingLocation];
}

#pragma mark - CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
 NSLog@"didUpdateLocations";
}

然而,当我进入前场时,enterForeGround会接到电话,但是并没有随时调用过更新地点。 我不知道我错过了一些关键位置服务的事情。如果您有任何想法,请告诉我。 感谢

2 个答案:

答案 0 :(得分:0)

永远不能保证会调用didUpdateLocations。您可以做的事情是调用viewDidLoad时,您可以请求que最后一个位置。 self.locationManager.location。

您现在可以检查该位置的时间戳和精度。如果数据太旧或无法满足您的需求,您可以调用startUpdatingLocation,当您根据过滤器和准确性获得修复时,将调用didUpdateLocations。

答案 1 :(得分:0)

首先,您需要通过转到目标 - >在后台添加位置服务功能和“后台模式”下的“位置更新”检查。   其次你需要在某个地方适当地开始位置更新[self.locationManager startUpdatingLocation](对于你在viewWillAppear中提供的代码似乎是最好的选择)

- (void)viewWillAppear:(BOOL)animated
{
    self.locationManager.delegate = self;
   [self.locationManager startUpdatingLocation]
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
}

现在,当app进入后台模式并重新输入Foreground时,应调用locationManager委托方法。