我需要使用CLLocation

时间:2011-03-10 18:22:46

标签: iphone cllocation

我需要从GPS上读取我的位置! 问题是我需要从方法

中完成
- (void)locationUpdate:(CLLocation *)location;

所以......这就是我的工作方式:

在.h文件中我有这个

CLLocation *mylocation;
中的

mylocation = [[CLLocation alloc] init];
locationController = [[CLController alloc] init];
locationController.delegate = self;
[locationController.locationManager startUpdatingLocation];

然后

- (void)locationUpdate:(CLLocation *)location {
mylocation = location;
}

并且它有效,如果我使用NSLog(在mylocation上)我看到我的真实位置! 但是...在另一种方法(与UIButton连接的IBAction)中我想使用“mylocation”! 它不起作用,我不知道为什么!

如果,在这种方法中,我尝试这样做

NSLog(@"%@", mylocation);

控制台报告此:

<+0.00000000, +0.00000000> +/- 0.00m (speed -1.00 mps / course -1.00) @ 3/10/11 7:21:24 PM Central European Time

所以变量是空的!

为什么?

PS =在我的IBAction中,我当然有这个

mylocation = [[LCLocation alloc] init];

否则应用程序崩溃!

2 个答案:

答案 0 :(得分:2)

这一行:

mylocation = location;

将mylocation的内存指针设置为位置管理器返回的内存管理器,后者将被释放。

编辑:

mylocation = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];

答案 1 :(得分:1)

  

同样在我的IBAction中我当然有这个

mylocation = [[LCLocation alloc] init];

因此,您将获得零值,因为您始终使用新创建的空白位置覆盖您的位置值 - 您不应该这样做。

使您的应用程序崩溃的问题是,在locationUpdate方法中,您获得自动释放的值,因此为了确保其在该方法之外的有效,您必须保留它。 (并且不要忘记发布旧值)。最简单的方法是为myLocation ivar创建property并使用它访问ivar:

// .h file

@property (nonatomic, retain) CLLocation *myLocation;

// .m
@synthesize myLocation;
... 
- (void)locationUpdate:(CLLocation *)location {
    self.mylocation = location;
}

- (void) dealloc{
   [myLocation release]; 
   myLocation = nil;

   ...
   [super dealloc];
}