在Apple的文档中,他们展示了使用CoreLocation来提取GPS数据的方法
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
}
这是为了通知您GPS已更新。 newLocation将拥有您需要的GPS数据,但如果我在此方法中放置一个语句,将其分配给一个注明要写入的属性。
latitude = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
NSLog(@"%@", latitude);
当放入方法时,上面的NSLog将显示正确的坐标。但是当方法结束时,数据似乎消失了。我的班级中的“纬度”属性没有被分配。也许这是一个范围问题?我无法从此返回任何内容,我无法在方法之外看到newLocation。有没有人找到解决这个问题的方法?
编辑:我使用的是弧线,纬度属性为强。我还需要其他任何属性吗? 这是我用来导入属性的实现代码。 (纬度是LocationAwareness的属性)这两个nslog都显示为null
#import "ViewController.h"
#import "LocationAwareness.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize location;
- (void)viewDidLoad
{
[super viewDidLoad];
self.location = [[LocationAwareness alloc] init];
NSLog(@"%@", location.latitude);
NSLog(@"%@", location.longitude);
}
答案 0 :(得分:0)
需要保留。不要忘记再次释放变量以及dealloc方法。因此,您的-didUpdateToLocation方法应如下所示。
latitude = [[NSString stringWithFormat:@"%f", newLocation.coordinate.latitude] retain];
...
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if (latitude) {
[latitude release];
}
latitude = [[NSString stringWithFormat:@"%f", newLocation.coordinate.latitude] retain];
}
否则,如果您使用ARC,只需添加具有“强”属性的属性。
答案 1 :(得分:0)
如果您使用ARC且纬度属于强属性,请使用:
self.latitude = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];