Question

I ai une application avec une barre d'onglets et 3 onglets. L'emplacement actuel de l'utilisateur va être nécessaire pour être connu sur l'un des trois onglets. Est-ce que le meilleur endroit pour mettre en œuvre CLLocationManager dans le délégué de l'application dans ce cas?

Est-il ok (bonne pratique?) De mettre les méthodes de délégué CLLocationManager dans le fichier délégué app m?

Où proposeriez-vous je place la CLLocationManager que je vais être appeler -startUpdatingLocation de l'un des trois onglets?

Merci

Était-ce utile?

La solution

Le délégué de l'application est un endroit raisonnable pour le mettre. Une autre option serait de créer une classe d'usine singleton personnalisée qui a une méthode de classe qui retourne votre emplacement délégué de gestionnaire et mettre en œuvre les méthodes déléguées là. Cela garder votre application propre de classe déléguée.

Voici une classe singleton squelette implemention basé sur de Peter Hosey de » singletons Cocoa: les faire le mal ". Cela peut-être exagéré, mais il est un début. Ajoutez vos méthodes de délégués à la fin.

static MyCLLocationManagerDelegate *sharedInstance = nil; 

+ (void)initialize {
    if (sharedInstance == nil)
        sharedInstance = [[self alloc] init];
}

+ (id)sharedMyCLLocationManagerDelegate {
    //Already set by +initialize.
    return sharedInstance;
}

+ (id)allocWithZone:(NSZone*)zone {
    //Usually already set by +initialize.
    @synchronized(self) {
        if (sharedInstance) {
            //The caller expects to receive a new object, so implicitly retain it
            //to balance out the eventual release message.
            return [sharedInstance retain];
        } else {
            //When not already set, +initialize is our caller.
            //It's creating the shared instance, let this go through.
            return [super allocWithZone:zone];
        }
    }
}

- (id)init {
    //If sharedInstance is nil, +initialize is our caller, so initialze the instance.
    //If it is not nil, simply return the instance without re-initializing it.
    if (sharedInstance == nil) {
        if ((self = [super init])) {
            //Initialize the instance here.
        }
    }
    return self;
}

- (id)copyWithZone:(NSZone*)zone {
    return self;
}
- (id)retain {
    return self;
}
- (unsigned)retainCount {
    return UINT_MAX; // denotes an object that cannot be released
}
- (void)release {
    // do nothing 
}
- (id)autorelease {
    return self;
}
#pragma mark -
#pragma mark CLLLocationManagerDelegateMethods go here...

Autres conseils

J'ai simplement inclus mon LocationManager dans mon AppDelegate directement, puisqu'il a ajouté peu de code.

Toutefois, si vous allez inclure votre LocationManager dans le AppDelegate, alors vous devriez envisager d'utiliser NSNotifications pour alerter votre viewcontrollers de l'emplacement met à jour votre AppDelegate reçoit.

Voir ce lien Envoyer et recevoir des messages par NSNotificationCenter en Objective-C?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top