мне нужно использовать CLLocation - PullRequest
0 голосов
/ 10 марта 2011

Мне нужно прочитать мою позицию с 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), я вижу свое реальное местоположение!Но ... в другом методе (IBAction, связанный с UIButton) я хочу использовать "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];

в противном случае приложение вылетает!

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Эта строка:

mylocation = location;

Устанавливает указатель памяти mylocation на тот, который возвращается менеджером местоположений, который позже освобождается.

EDITED:

mylocation = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];
1 голос
/ 10 марта 2011

также в моем 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];
}
...