我的目标是每当应用程序进入前台时,我将获取位置以更新我的天气预报。我的工作是
- (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
会接到电话,但是并没有随时调用过更新地点。
我不知道我错过了一些关键位置服务的事情。如果您有任何想法,请告诉我。
感谢
答案 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委托方法。