CLLocation iVar теряет значение, становится нулевым в середине программы

это мой первый пост, но я постоянно читаю сайт. Я работаю над программой, которая занимается передачей CLLocation* между несколькими классами. Это начинается с того, что мой делегат приложения находит текущее местоположение с помощью CLLocationManager. Как только местоположение найдено, метод didUpdateToLocation: newLocation: fromLocation устанавливает это местоположение в другой класс с именем queryPage:

//AppDelegate.m
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *) newLocation fromLocation:(CLLocation *)oldlocation {
     currentLocation = newLocation;
     [queryPage setLocation:currentLocation];
}

Здесь я могу зарегистрировать местоположение, и все работает нормально. Затем в queryPage setLocation может получить CLLocation и зарегистрировать его без проблем. Однако позже в моем коде такие методы, как button1 и button2, имеют проблемы с доступом к currentLocation. button1 может иногда регистрировать это, а button2 обычно регистрирует «(null)». Вот QueryPage.h:

//QueryPage.h
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>

@interface QueryPage : UIViewController {
     CLLocation *currentLocation;
}
@property (nonatomic, retain) CLLocation *currentLocation;
-(void)setLocation:(CLLocation*)location;

и файл имплементации:

//QueryPage.m
#import QueryPage.h
@implementation QueryPage
@synthesize currentLocation;

...

-(void)setLocation:(CLLocation*)location
{
     self.currentLocation = location;
}

...

-(IBAction)button1:(id)sender
{
     NSLog(@"button1: %@", currentLocation);
}

...

-(IBAction)button2:(id)sender
{
     NSLog(@"button2: %@", currentLocation);
}

Я думаю, что я, должно быть, неправильно устанавливаю/сохраняю currentLocation, но я понятия не имею, как это сделать. Я искал несколько дней, пытаясь правильно обращаться с памятью, и это все, что я получил. Я попытался сохранить currentLocation и многие другие вещи, которые смог найти в Интернете. Я знаю, что соединения в IB хорошие (я регистрирую это каждый раз, когда они касаются), и currentLocation всегда устанавливается до того, как будут затронуты какие-либо кнопки (я вижу это в журнале). Если кто-то там может помочь мне с этим, пожалуйста, дайте мне знать. Это похоже на некоторые другие проблемы на форуме, но я пробовал все, что было рекомендовано до сих пор. Спасибо!


person alexshafran    schedule 18.04.2011    source источник


Ответы (1)


удаление неатомарных должно помочь

person picciano    schedule 18.04.2011
comment
Кроме того, нет смысла использовать метод setLocation. Просто используйте setCurrentLocation, созданный вашим синтезом. - person picciano; 19.04.2011
comment
Извините, еще кое-что. Вы должны использовать self.currentLocation в операторах NSLog, а не только currentLocation. - person picciano; 19.04.2011
comment
спасибо picciano! работал отлично. Спасибо за такой быстрый ответ - person alexshafran; 19.04.2011