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 を使用している場合は、'strong' 属性を持つプロパティを追加するだけです。

于 2012-04-06T22:16:54.367 に答える
0

ARC を使用していて、緯度が強力なプロパティである場合は、次を使用します。

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