我需要从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];
否则应用程序崩溃!
答案 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];
}