我正在构建一个GPS应用程序,我已经能够成功获取位置更新。但是,这些更新正在快速发展(约1-2秒)。我希望能够每15秒更新一次UILabel。我的代码出了什么问题?
P.S。 [self setLabels:manager];
只是将UILabel设置为管理员属性的值:
manager.location.coordinate.latitude
& longitude:manager.location.coordinate.longitude
谢谢!
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation* location = [locations lastObject];
NSDate* eventDate = location.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 15.0) {
//SHOULD BE LOOPING INTO HERE EVERY 15 SECONDS. INSTEAD IT IS 1-2 SECONDS
[self setLabels:manager];
}
}
答案 0 :(得分:3)
GPS不是您可以安排的,这意味着当您开始监控位置时,您将获得大量的位置更新,因为GPS信号正在变得更好。
特别是在开始时你想要更新,然后每15秒更新一次,因为你得到了更好的GPS修复。
您应该重新考虑代码并可能比较位置结果以确定是否需要更新标签。
答案 1 :(得分:2)
多数民众赞成因为1小于15,你的代码应该是
if (abs(howRecent) >= 15.0) {
//SHOULD BE LOOPING INTO HERE EVERY 15 SECONDS. INSTEAD IT IS 1-2 SECONDS
[self setLabels:manager];
}
答案 2 :(得分:2)
创建一个像iVar:
@property (nonatomic, strong) NSDate *lastUpdatedTime;
然后检查lastUpdatedTime
是否超过15秒(或第一次为零)并在每次设置标签时更新日期。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
if( [self.lastUpdatedTime timeIntervalSinceNow] > 15 || self.lastUpdatedTime == nil ){
[self setLabels:manager];
self.lastUpdatedTime = [NSDate date];
}
}
通过这种方式,您可以保持GPS更新它们的工作方式。但只能每15秒更新一次标签。
答案 3 :(得分:-1)
每15秒调用后台模式并获取数据
double delayInSeconds = 15.0;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(delayTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
^(void){
//your code here
});