2

私はiOS開発にまったく慣れていないので、これを間違っている可能性がありますが、多くのアプリで再利用できる汎用クラスとして必要な座標gpsデータを取得するために使用しているクラスがあります。私の問題は、GPSからデータを取得して他のアプリで正しく表示することです。

GPSクラスのヘッダーファイルは次のとおりです。

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface LocationAwareness : NSObject <CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
@property(copy) NSString *longitude;
@property(copy) NSString *latitude;

@end

そして、ここに実装があります:

#import "LocationAwareness.h"

@implementation LocationAwareness
@synthesize longitude;
@synthesize latitude;


- (id)init {

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
return self;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation   *)newLocation fromLocation:(CLLocation *)oldLocation {

    // Stops updating location if data has been updated within 10 minutes
    if ( abs([newLocation.timestamp timeIntervalSinceDate: [NSDate date]]) < 600) {

        [locationManager stopUpdatingLocation];
        float latitudedata = newLocation.coordinate.latitude;
        latitude = [NSString stringWithFormat:@"%f", latitudedata];

        float logitudedata = newLocation.coordinate.longitude;
        longitude = [NSString stringWithFormat:@"%f", logitudedata];

    }
}

@end

現在、別のプロジェクトで緯度または経度のプロパティを取得する方法を教えてくれる場所が見つからないようです。ヘッダーをインポートして、LocationAwareness.latitudeを使用可能な変数に格納しようとしましたが、格納するすべてが空白になります。メインクラスを開始してlocationawarenessオブジェクトをalocinitすると、gpsが起動するので、機能していると思いますが、これがどのように機能してすべてを正常に処理するかについては十分に理解していないようです。私は何時間もインターネットを検索してきました。誰かが私が間違っていることを知っていますか?

4

1 に答える 1

3

まあ、これは問題を引き起こしているかもしれないし、引き起こしていないかもしれません(それはかなりありそうです)が、主要な問題はあなたのinitメソッドです。

最初は次のようになります。

self = [super init];
if (self) {
    // Do your initializing as you did above.
}
return self;

編集:
プロジェクトへの更新でコードを追加しましたが、うまく機能します。これを使用するには、次のようなことを行う必要があります。

LocationAwareness *loc = [[LocationAwareness alloc] init];

// Give it some time to start updating the current location and then
// in a different function:
NSLog(@"%@", loc.latitude);

編集2
これを使用している場合は常に、それを格納するプロパティを宣言して、一度作成して何度も参照できるようにする必要があります。これを行うには、次のコードを使用します。

このオブジェクトを使用するオブジェクトのヘッダーで、他のプロパティとともにこれを追加します。

@property (nonatomic, assign) LocationAwareness *location;

次に、実装ファイル(.mファイル)の先頭に、他の@synthesize行が表示されるはずです。次の行を追加します。

@synthesize location;

次に、上記の例のように、使用する実際のロケーションインスタンスを作成します。

self.location = [[LocationAwareness alloc] init];

次に、現在地を把握して更新の提供を開始する時間を与えます。次に、次のように場所を印刷できます。

NSLog(@"%@", self.location.latitude);
于 2012-04-04T02:33:20.103 に答える