定位服务,如何在一段时间(30秒)后更新纬度,经度? [英] Location services, how to update latitude, Longitude after some time (30 sec)?

查看:92
本文介绍了定位服务,如何在一段时间(30秒)后更新纬度,经度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在通过定位服务获取纬度,经度,高度,准确性和速度.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆