0

我需要从 GPS 读取我的位置!问题是我需要从方法中做出来

- (void)locationUpdate:(CLLocation *)location;

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

在 .h 文件中我有这个

CLLocation *mylocation;

在 -viewDidLoad

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];

否则应用程序崩溃!

4

2 回答 2

2

这一行:

mylocation = location;

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

编辑:

mylocation = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];
于 2011-03-10T18:29:38.180 回答
1

当然,在我的 IBAction 中,我也有这个

mylocation = [[LCLocation alloc] init];

所以你得到零值,因为你总是用新创建的空白位置覆盖你的位置值——你不应该这样做。

使您的应用程序崩溃的问题是在locationUpdate方法中您获得自动释放的值,因此为了确保其在该方法之外有效,您必须保留它。(并且不要忘记释放旧值)。最简单的方法是为 myLocation ivar创建一个属性并使用它访问 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];
}
于 2011-03-10T19:06:01.017 回答