2009-12-05 5 views
0

J'essaie d'effectuer une opération simple que j'ai fait beaucoup dans ce programme. J'essaie de lancer le CLLocationManager une fois que l'application a fini de se lancer et d'obtenir l'emplacement actuel une fois la mise à jour terminée. Mon application fonctionne en ce qu'elle obtient l'emplacement actuel, lorsque je NSLog l'emplacement actuel, il fonctionne bien. Le problème est que j'essaie de passer cet emplacement d'un objet à un autre et qu'il n'a pas de valeur une fois qu'il y est arrivé.L'accesseur Getter ne fonctionne pas, l'objectif iphone sdk C

J'ai cherché des méthodes d'accesseur et tout semble correct car j'ai ce genre d'opérations partout dans mon programme. J'ai essayé de suivre de nombreux exemples mais aucun ne semble fonctionner.

Voici du code.

Ceci est le fichier .h du 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 

C'est le fichier .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]); 

} 

A ce stade, il fonctionne. Je reçois l'emplacement imprimé et tout, mais j'ai besoin de cet emplacement dans un autre objet et il semble que toutes mes tentatives de retravailler la notation par points a échoué. Voici le. h de l'objet que j'ai besoin dans.

@interface School_Location_List_Controller : UIViewController { 


    CLLocation* currentLocation;  

} 

- (IBAction) btnBack_Clicked:(id)sender; 


@property (nonatomic, assign) CLLocation* currentLocation; 

Et voici le .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]; 
} 

Il est à ce moment que je suis confus. Quand j'imprime cela, cela dit simplement que currentLocation est nul. C'est comme si elle n'a jamais eu les données ..

Merci les gars d'avance.

Répondre

0

Votre problème est cette ligne:

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

Ici, vous allouons et l'initialisation d'une marque nouvel objet, qui est tout à fait distinct du délégué actuel de l'application. Si vous voulez obtenir le délégué de l'application qui existe déjà, utilisez:

YogaAllianceAppDelegate *updated = (YogaAllizanceAppDelegate *)[[UIApplication sharedApplication] delegate]; 
+0

Oups! Je n'ai même pas attrapé ça! –

+0

DAVE !!!! Je ne peux pas vous remercier assez. Je suis nouveau à toute cette affaire et ai creusé mon cerveau pendant des jours sur cette chose. C'est toujours les choses simples qui font cela .. Merci – Makinitez21

0

Je ne sais pas si cela est votre problème, mais essayez ceci: Vous avez la propriété mycurrentLocation comme assign, ce qui signifie que lorsque jeu, vous avez juste un pointeur sur un objet. Lorsque l'emplacement est libéré, mycurrentLocation ne peut pas s'y accrocher. Je suggère l'utilisation retain ou copy.

+0

Voir la réponse de @Dave Delong ci-dessus. Son est probablement correct. Pardon! –

+1

John, Merci pour votre réponse, c'était une aide. – Makinitez21

Questions connexes