мне нужно использовать CLLocation

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

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


person JAA    schedule 10.03.2011    source источник


Ответы (2)


также в моем 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];
}
person Vladimir    schedule 10.03.2011

Эта строка:

mylocation = location;

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

ОТРЕДАКТИРОВАНО:

mylocation = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];
person NWCoder    schedule 10.03.2011
comment
нет: ошибка: lvalue требуется как левый операнд присваивания (я думаю, что не могу использовать mylocation.coordinate.xxx ) - person JAA; 10.03.2011