在UIView上不显示CLLocation速度

时间:2013-08-30 21:12:03

标签: ios performance latitude-longitude cllocation

我对iOS编码很新。我需要一些帮助来解决CLLocation的问题。

我使用didUpdateLocations来检索位置和速度信息。我可以使用NSLog获取这些详细信息和显示。

但是,我无法在UIview上显示它。我该如何解决?

以下是我的代码。

我使用CoreLocationController来检索我的位置详细信息。

@implementation CoreLocationController

@synthesize locMgr;
@synthesize location;

- (id)init {
    self = [super init];

    if(self != nil) {
        self.locMgr = [[CLLocationManager alloc] init];
        self.locMgr.delegate = self;
    }

    return self;
}
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations
{
    DriveTrapViewController *driveTrapViewController = [[DriveTrapViewController alloc]init];

    self.location = [locations lastObject];
    //NSLog(@"Speed, %f", self.location.speed);
    [driveTrapViewController locationUpdate:(CLLocation *)self.location];
}

我将检索到的详细信息发送回DriveTrapViewController。我可以使用NSLog显示它们。但是self.speedText.text始终为NULL,并且屏幕上没有显示任何内容。

@implementation DriveTrapViewController

@synthesize CLController;
@synthesize speedText = _speedText;
- (void)viewDidLoad {
    [super viewDidLoad];
    CLController = [[CoreLocationController alloc] init];

    CLController.delegate = self;
    [CLController.locMgr startUpdatingLocation];
}

- (void)locationUpdate:(CLLocation *)location 
{
    NSString *speed = [NSString stringWithFormat:@"SPEED: %f", location.speed];
    NSLog(@"Speed %@",speed);
    self.speedText.text = speed;
}

我该如何解决这个问题?任何帮助表示赞赏。感谢

2 个答案:

答案 0 :(得分:2)

每次调用locationManager:didUpdateLocations:方法时,它都会创建一个新的DriveTrapViewController,一旦方法完成就会被销毁。也许你应该使用ivar代替它。这样每次都不会创建和销毁它。

此外,两个对象似乎都在制作另一个对象的实例。而不是核心位置问题,这是一般的架构类型问题。

我建议在这个阶段你应该在你的DriveTrapController中有一个CLLocationManager变量,而不是试图把它分解成它自己的控制器。

答案 1 :(得分:0)

试试CLController.locMgr.desiredAccuracy = kCLLocationAccuracyBestForNavigation;。这应该包括一些关于用户位置,速度,方位等的额外信息......