定位服务,如何在一段时间(30秒)后更新纬度,经度? [英] Location services, how to update latitude, Longitude after some time (30 sec)?
问题描述
我正在通过定位服务获取纬度,经度,高度,准确性和速度.
I am getting latitude, Longitude, Altitude, Accuracy, Speed from Location services.
我想每30秒更新所有这些信息.为此,我使用了NSTimer:
I want to update all this information every 30 sec. For this purpose I've used a NSTimer:
[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(locationUpdate:) userInfo:nil repeats:YES];
我已将
放入 viewDidLoad
方法中.它第一次显示输出,但是第二次,当计时器调用它时,显示此错误:
which I've put in the viewDidLoad
method. It shows an output first time, but the second time, when the timer invokes this, it shows this error:
2011-08-02 13:17:00.141 CoreLocationAssign[1120:207] This is location <__NSCFTimer: 0x4b200a0>
2011-08-02 13:17:00.142 CoreLocationAssign[1120:207] -[__NSCFTimer coordinate]: unrecognized selector sent to instance 0x4b200a0
2011-08-02 13:17:00.144 CoreLocationAssign[1120:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFTimer coordinate]: unrecognized selector sent to instance 0x4b200a0'
*** Call stack at first throw:
代码如下:
MyCLController.h
@implementation MyCLController
@synthesize locationManager;
@synthesize delegate;
- (id) init{
if (self!=nil) {
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self.locationManager startUpdatingLocation];
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
//NSLog(@"Location: %@", [newLocation description]);
[self.delegate locationUpdate:newLocation];
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
// NSLog(@"Error: %@", [error description]);
[self.delegate locationError:error];
}
- (void)dealloc {
[self.locationManager release];
[super dealloc];
}
CoreLoactionController.h
- (void)viewDidLoad {
locationController = [[MyCLController alloc] init];
locationController.delegate = self;
[locationController.locationManager startUpdatingLocation];
[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(locationUpdate:) userInfo:nil repeats:YES];
[super viewDidLoad];
}
- (void)locationUpdate:(CLLocation *)location {
locationLable.text = [location description];
CLLocationCoordinate2D coordinate = [location coordinate];
NSLog(@"This is location %@",[location description]);
NSLog(@"Lattitude = %@",[NSString stringWithFormat:@"%f", coordinate.latitude]);
NSLog(@"Langitude = %@",[NSString stringWithFormat:@"%f", coordinate.longitude]);
NSLog(@"Altitude = %@",[NSString stringWithFormat:@"%gm", location.altitude]);
NSLog(@"horizontalAccuracy = %@",[NSString stringWithFormat:@"%gm", location.horizontalAccuracy]);
NSLog(@"verticalAccuracy = %@",[NSString stringWithFormat:@"%gm", location.verticalAccuracy]);
NSLog(@"Speed = %@",[NSString stringWithFormat:@"%gm", location.speed]);
}
我如何解决这个问题?我想每30秒更新一次位置.
How ccan I solve this problem? I want to update the location every 30 sec.
推荐答案
实际上是在这里:
- (void)locationUpdate:(CLLocation *)location
您没有收到CLLocation *,而是NSTimer.您应该使用userInfo传输对象:
You're not receiving a CLLocation * but a NSTimer. You should use the userInfo to transmit an object:
[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(locationUpdate:) userInfo:location repeats:YES];
和
-(void)locationUpdate:(NSTimer*) timer{
//probably
CLLocation *location = (CLLocation*)[timer userInfo];
//...
}
这篇关于定位服务,如何在一段时间(30秒)后更新纬度,经度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!