0

GPSから自分の位置を読み取る必要があります!問題は、私がメソッドからやる必要があるということです

- (void)locationUpdate:(CLLocation *)location;

だから...これは私が働いている方法です:

.hファイルで私はこれを持っています

CLLocation *mylocation;

-viewDidLoadで

mylocation = [[CLLocation alloc] init];
locationController = [[CLController alloc] init];
locationController.delegate = self;
[locationController.locationManager startUpdatingLocation];

それから

- (void)locationUpdate:(CLLocation *)location {
mylocation = location;
}

NSLog(mylocation)を使用すると、実際の場所が表示されます。しかし...別の方法(UIButtonに接続されたIBAction)では、「mylocation」を使用したいと思います。それは機能していません、そして私は理由がわかりません!

この方法で、私がこれをやろうとすると

NSLog(@"%@", mylocation);

コンソールはこれを報告します:

<+0.00000000, +0.00000000> +/- 0.00m (speed -1.00 mps / course -1.00) @ 3/10/11 7:21:24 PM Central European Time

したがって、変数は空です!

なぜ??

PS =私のIBActionにも、もちろん、これがあります

mylocation = [[LCLocation alloc] init];

そうしないと、アプリがクラッシュします。

4

2 に答える 2

2

この行:

mylocation = location;

mylocationのメモリポインタを、後で解放されるロケーションマネージャによって返されるものに設定しています。

編集:

mylocation = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];
于 2011-03-10T18:29:38.180 に答える
1

もちろん、私のIBActionにもこれがあります

mylocation = [[LCLocation alloc] init];

したがって、ロケーション値を新しく作成された空白のロケーションで常に上書きするため、ゼロ値を取得します。これは行わないでください。

アプリケーションをクラッシュさせる問題は、locationUpdateメソッドで自動解放された値を取得することです。そのため、そのメソッドの外部で有効であることを確認するには、それを保持する必要があります。(そして古い値を解放することを忘れないでください)。これを行う最も簡単な方法は、myLocation ivarのプロパティを作成し、それを使用してivarにアクセスすることです。

// .h file

@property (nonatomic, retain) CLLocation *myLocation;

// .m
@synthesize myLocation;
... 
- (void)locationUpdate:(CLLocation *)location {
    self.mylocation = location;
}

- (void) dealloc{
   [myLocation release]; 
   myLocation = nil;

   ...
   [super dealloc];
}
于 2011-03-10T19:06:01.017 に答える