Getter Accessor не работает, iphone SDK цель C - PullRequest
0 голосов
/ 05 декабря 2009

Я пытаюсь выполнить простую операцию, которую я много сделал в этой программе. Я пытаюсь запустить CLLocationManager после завершения запуска приложения и получить текущее местоположение после обновления. Мое приложение работает в том, что оно получает текущее местоположение, когда я NSLog текущее местоположение, оно работает нормально. Проблема в том, что я пытаюсь передать это местоположение от одного объекта к другому, и у него нет значения, когда он туда попадает.

Я искал методы доступа, и все кажется правильным, так как у меня есть эти типы операций во всей моей программе. Я пытался следовать многочисленным примерам, но ни один из них не помог.

Вот код.

Это файл .h файла CLLocationManagerDelegate.

@interface YogaAllianceAppDelegate : NSObject <UIApplicationDelegate,CLLocationManagerDelegate> {

CLLocationManager *locationManager;
    CLLocation *mycurrentLocation;

    float curLats;
    float curLons;
    BOOL locationDidUpdate;

    UIWindow *window;

    YogaAllianceViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;  
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, assign) float curLats;
@property (nonatomic, assign) float curLons;
@property (nonatomic, assign) CLLocation *mycurrentLocation;
@property (nonatomic, retain) IBOutlet YogaAllianceViewController *viewController;
@end

Это файл .m

@synthesize viewController, locationManager, curLats, curLons, mycurrentLocation;





- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    self.locationManager = [[[CLLocationManager alloc]init] autorelease];
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.delegate = self;
    [locationManager startUpdatingLocation];


    locationDidUpdate = NO;
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

}


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

    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"currentLocationDidUpdate" object: self];

    [locationManager stopUpdatingLocation];



    NSLog(@"Core Location says location available");


    self.curLats = newLocation.coordinate.latitude;
    self.curLons = newLocation.coordinate.longitude;

    self.mycurrentLocation  = newLocation;


    NSLog(@"current position is then %@", [mycurrentLocation description]);

}

На данный момент это работает. Я распечатываю местоположение и все такое, но мне нужно это местоположение в другом объекте, и кажется, что все мои попытки изменить точечную запись потерпели неудачу. Здесь . h объекта, в котором я нуждаюсь.

@interface School_Location_List_Controller : UIViewController {


    CLLocation* currentLocation;    

}

- (IBAction) btnBack_Clicked:(id)sender;


@property (nonatomic, assign) CLLocation* currentLocation;

А вот и .m

@implementation School_Location_List_Controller

@synthesize destinations, closeSchools, currentLocation;



-(void) viewWillAppear: (BOOL)animated {


    NSLog (@"Registered for location events");

    YogaAllianceAppDelegate *updated = [[YogaAllianceAppDelegate alloc]init];


    currentLocation = updated.mycurrentLocation ;



    NSLog(@"current position here in the passed object is %@", [currentLocation description]);


    [super viewWillAppear:animated];
}

Именно в этот момент я запутался. Когда я распечатываю это, он просто говорит, что currentLocation равен Null. Как будто он никогда не получал данные ..

Заранее спасибо, ребята.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2009

Я не уверен, что это ваша проблема, но попробуйте следующее: у вас есть свойство mycurrentLocation как assign, что означает, что при установке у вас просто есть указатель на объект. Когда местоположение освобождается, mycurrentLocation не может удержать его.

Я предлагаю использовать retain или copy.

0 голосов
/ 05 декабря 2009

Ваша проблема в этой строке:

YogaAllianceAppDelegate *updated = [[YogaAllianceAppDelegate alloc]init];

Здесь вы выделяете и инициализируете совершенно новый объект, который полностью отличается от существующего делегата приложения. Если вы хотите получить уже существующий делегат приложения, используйте:

YogaAllianceAppDelegate *updated = (YogaAllizanceAppDelegate *)[[UIApplication sharedApplication] delegate];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...