如何获取与CLLocationManager关联的值 - 即CLLocationSpeed,CLLocationDirection,CLLocationAccuracy,CLLocationCoordinates?

时间:2012-11-02 21:22:30

标签: objective-c cllocation

我在.m文件中有以下代码。

代码是执行以下任务:

  1. 初始化CLLocationManager类
  2. 获取属性(速度,准确度,坐标)
  3. 将这些值转换为NSString
  4. 使用NSLog
  5. 将这些值记录到屏幕上
  6. 设置指定标签中的值,最后
  7. 循环通过方法“locationUpdate”中包含的代码。
  8. 代码为所有这些属性提供初始值。但是,每个属性的值都相同(即2.7188880)。

    此外,当我通过方法“locationUpdate”循环时,代码为每个属性返回0。

    有人能告诉我代码没有返回属性值的原因吗?

    - (void)viewDidLoad {
        [super viewDidLoad];
        locationManager = [[CLLocationManager alloc] init];
    
        [locationManager setDelegate:self];
    
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    
        [locationManager startUpdatingLocation];
    
        NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2.0
                                                          target: self
                                                        selector:@selector(locationUpdate)
                                                        userInfo: nil repeats:YES];
    
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    
    
        NSString *spd = [[NSString alloc] initWithFormat:@"%f", speed];
    
        NSString *crd = [[NSString alloc] initWithFormat:@"%f", coordinates];
    
        NSString *drc = [[NSString alloc] initWithFormat:@"%f", direction];
    
        NSString *acc = [[NSString alloc] initWithFormat:@"%f", accuracy];
    
        NSString *desc = [locationManager description];
    
        NSLog(@"Speed: %@", spd);
        NSLog(@"Coordinates: %@", crd);
        NSLog(@"Direction: %@", drc);
        NSLog(@"Accuracy: %@", acc);
        NSLog(@"Description: %@", desc);
    
        Speedometer.text = spd;
        CoordinatesLabel.text = crd;
        DirectionLabel.text = drc;
        AccuracyLabel.text = acc;
        DescriptionLabel.text = desc; 
    }
    
    
    - (void)locationUpdate {
    
        NSString *desc = [locationManager description];
    
        NSString *spd = [NSString stringWithFormat:@"%g", speed];
        NSString *crd = [NSString stringWithFormat:@"%g", coordinates];
    
        NSString *drc = [NSString stringWithFormat:@"%g", direction];
    
        NSString *acc = [NSString stringWithFormat:@"%g", accuracy];
    
        NSLog(@"Speed: %@", spd);
        NSLog(@"Coordinates: %@", crd);
        NSLog(@"Direction: %@", drc);
        NSLog(@"Accuracy: %@", acc);
    
        Speedometer.text = spd;
        CoordinatesLabel.text = crd;
        DirectionLabel.text = drc;
        AccuracyLabel.text = acc;
        DescriptionLabel.text = desc; 
    }
    

1 个答案:

答案 0 :(得分:0)

您不应该设置计时器。您只需实现位置管理器委托方法。如果有更新,您将被告知。

您最大的问题是您使用变量speedcoordinatesdirectionaccuracy。你永远不会把它们放在任何地方(至少你发布的任何代码)。

实施locationManager:didUpdateLocations:和/或locationManager:didUpdateToLocation:fromLocation:方法。这些将通过更新的位置信息进行调用。使用这些来更新您的speed和其他ivars。

编辑:另一个建议。不要使用字符串格式来格式化要显示给用户的数字。请改用NSNumberFormatter。这样,根据用户的语言环境正确格式化数字。