从视图开始的NStimer确实加载,给出错误的时间!客观C iPhone

sta*_*lew -1 iphone objective-c nstimer viewdidload

我正在启动一个计时器,视图已加载

- (void)viewDidLoad
{
[super viewDidLoad];
locationManager.delegate = self;
[NSTimer scheduledTimerWithTimeInterval:10.0 //这里的间隔必须是一个浮动
目标:自
选择器:@selector(onTick :)
userInfo:nil重复:是];
}

然后我有我的计时器方法:

- (void)onTick:(NSTimer*)timer {
[locationManager startUpdatingLocation];

}

然后调用位置管理器,因为它是一个委托:

- (void)locationManager:(CLLocationManager*)manager
didUpdateToLocation :( CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation {
NSLog(@"使其成为位置管理器");

NSTimeInterval timePassedSinceLastLocationUpdate = fabs([oldLocation.timestamp timeIntervalSinceNow]);

NSLog(@"更新时间:%f",timePassedSinceLastLocationUpdate);

的NSLog(@ "--------------");
//其他东西发生
[locationManager stopUpdatingLocation];
}

但是,显示的NSLOG是这样的:


2012-07-31 13:02:28.092 round5 [1713:f803]转发到位置经理
2012-07-31 13:02:28.095 round5 [1713:f803]更新时间:0.000000
2012-07-31 13:02: 28.095 round5 [1713:f803] --------------
2012-07-31 13:02:33.298 round5 [1713:f803]成为了位置经理
2012-07-31 13:02 :33.298 round5 [1713:f803]更新时间:5.222202
2012-07-31 13:02:33.300 round5 [1713:f803] --------------
2012-07-31 13:02 :44.086 round5 [1713:f803]转发到位置经理
2012-07-31 13:02:44.086 round5 [1713:f803]更新时间:15.986345
2012-07-31 13:02:44.087 round5 [1713:f803] - -------------
2012-07-31 13:02:53.297 round5 [1713:f803]定位经理
2012-07-31 13:02:53.302 round5 [1713:f803]更新时间:9.217123
2012-07-31 13:02:53.303 round5 [1713:f803] --------------
2012-07-31 13:03:04.096 round5 [1713:f803]让它成为位置经理
2012-07-31 13:03:04.097 round5 [1713:f803]更新时间:20.007919
2012-07-31 13:03:04.098 round5 [1713:f803] --------- -----
2012-07-31 13:03:13.297 round5 [1713:f803] m ade it to location manager
2012-07-31 13:03:13.298 round5 [1713:f803]更新时间:9.202388
2012-07-31 13:03:13.300 round5 [1713:f803] --------- -----
2012-07-31 13:03:24.111 round5 [1713:f803]转发到位置经理
2012-07-31 13:03:24.112 round5 [1713:f803]更新时间:20.012550
2012-07- 31 13:03:24.113 round5 [1713:f803] --------------

正如你可以看到的那样,模式正常化,它可以读取~10秒(这是正确的,因为这就是设置间隔的时间并与系统时钟进行比较)

20 ......哪个...我不知道它来自哪里.

我想我的问题是"为什么它不是一直读取10秒;为什么它会使NStimer值翻倍?"

非常感谢!

Rob*_*ier 5

你有两个错误.首先,你不应该startUpdatingLocation反复打电话.您应该调用它一次以开始请求更新,因为它们可用(您应该stopUpdatingLocation在不再需要更新时调用).你的第二个错误是相信打电话startUpdatingLocation会一直给你一个新的位置.你没有检查你的最后一次NSTimer ran.您正在检查上次CLLocationManager更新位置(oldLocation.timestamp)的时间.这可以是任意数量的时间.当您上次要求时,它可能无法获得更新.它有时可能会更新你没有要求它.

阅读位置感知编程指南.它解释了如何请求更新以及何时请求更新.通常,您打开它并告诉系统您希望更新的准确程度.然后,当事情发生变化时,让系统给你打电话.您不会反复询问位置更新.