0

在 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);
}
4

2 回答 2

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,只需添加一个具有“强”属性的属性。

于 2012-04-06T22:16:54.367 回答
0

如果您使用的是 ARC 并且纬度是一个强大的属性,请使用:

self.latitude = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
于 2012-04-06T22:18:01.510 回答