核心位置newLocation无法分配给属性

时间:2012-04-06 22:14:04

标签: iphone objective-c ios geolocation gps

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

2 个答案:

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