每15秒更新一次位置

时间:2014-02-25 08:18:25

标签: ios objective-c

我正在构建一个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];
  }
}

4 个答案:

答案 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
});