2010-10-24 7 views
0

Je suis encore assez novice en matière de programmation, j'ai donc quelques questions à poser. Lorsque vous avez une variable d'instance, dans mon cas de type CLLocationManager, dans mon fichier appDelegate.m, j'ai pensé que je pouvais allouer et initialiser ma variable d'instance CLLocationManager dans la méthode applicationDidFinishLaunching. Et puis je pourrais utiliser un bouton pour startUpdatingLocation dans une méthode différente (puisque je l'appelle d'une autre classe). Cela ne semble pas fonctionner et je pense que je devais allouer/init dans la même méthode que startUpdatingLocation. Est-ce vrai? Ai-je besoin de stopUpdatingLocation dans la même méthode? Mon code est ci-dessous:Portée d'un objet, objectif-c, CLLocationManager

(locationManager is declared as a property) 


- (void)stopUpdating { 
    [locationManager stopUpdatingLocation]; 
} 

- (double)distanceTraveled { 
    return distanceTraveled; 
} 

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

    // Override point for customization after application launch 
    [window addSubview:rootController.view];  
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [window makeKeyAndVisible]; 
} 

- (void)startUpdating { 
    [locationManager startUpdatingLocation]; 
} 

Il semble que je devrais faire plus comme:

- (void)startUpdating { 
locationManager = [[CLLocationManager alloc] init]; 
     locationManager.delegate = self; 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[locationManager startUpdatingLocation]; 
} 

Si je suis censé le faire cette deuxième façon, est-ce parce que la portée de la CLLocationManager objet est seulement pour la méthode dans laquelle il est? Je pensais l'avoir comme une variable d'instance je serais capable de l'utiliser dans d'autres méthodes et je pourrais avoir une méthode séparée pour startUpdatingLocation et stopUpdatingLocation. Merci.

+0

Pour ne pas trop déroger à votre question, mais veuillez comprendre que le délégué de l'application ne doit pas être utilisé pour ce genre de chose. Annoncez ceci à un contrôleur qui a le plus de sens (c'est-à-dire, en fonction de votre hiérarchie, il est peut-être logique de l'avoir dans votre contrôleur de vue racine à la place). Le délégué de l'application a un objectif défini: configurer votre application et gérer uniquement des événements spécifiques. C'est ton boulot de faire le reste, ailleurs. – jer

+0

Ok. Je suppose que j'ai supposé que la partie de l'appDelegate était de configurer votre application comme activer le GPS, mais je vois votre point. Va le changer. – Crystal

Répondre

2

Ce que vous pensiez initialement correct. Si vous avez une variable d'instance, cette variable reste disponible pendant toute la durée de vie de l'objet (dans ce cas, votre délégué d'application).

Si ce que vous faites ne fonctionne pas, c'est à cause d'un autre problème. vous n'avez pas besoin d'allouer un nouveau CLLocationManager chaque fois que vous appelez startUpdating.

Questions connexes