58 votes

Utilisation appropriée par iPhone du délégué d'application

Je suis à la recherche pour être en mesure de faire référence à certaines etat/objets par le biais de n'importe où dans mon application. Par exemple, un utilisateur se connecte à leur demande, j'ai besoin d'appeler un service web et de récupérer les informations sur les utilisateurs. Alors je veux être en mesure d'accéder à ces informations à partir de n'importe où dans l'application avec quelque chose comme ce qui suit:

myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;

Est de définir une variable d'instance, comme un objet Utilisateur dans l'application de délégué et de référencement à partir de là quand on a besoin d'une mauvaise façon de s'y prendre? J'ai généralement sur le login de l'utilisateur.

Voulu savoir comment les pros de la poignée de celui-ci.

52voto

Matt Gallagher Points 10431

Normalement, vous ne devez connecter les choses pour le délégué d'application si elles:

  • Ont été créés à partir de la même PLUME fichier en tant que délégué d'application (c'est à dire statique des éléments de l'INTERFACE à fenêtre unique interfaces)
  • Sont associés à niveau de l'application de gestion des événements, qui passe par le délégué d'application (comme l'élément de menu de la Fenêtre de Préférences)

Pour tout le reste, vous devez créer un singleton qui gère l'accès à eux.

Jason Coco suggéré de routage via le Contrôleur de l'Application. Dans mes programmes j'ai l'habitude de l'éviter, car je pense qu'il met trop de responsabilité au plus haut niveau -- je pense que les choses devraient s'auto-gérer, si possible, et que les niveaux supérieurs de la direction ne devrait être utilisé que lorsqu'il existe un besoin de coordination entre pairs au niveau des modules.

Je ne vais pas le lien sur mon propre blog, mais si vous Google moi et les singletons vous trouverez probablement un post que j'ai écrit plus de précisions.

31voto

Brad The App Guy Points 13329

Matt est un peu trop modeste. Son article sur le sujet est l’un des meilleurs que j’ai lu et mérite un lien. http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

13voto

e.James Points 51680

Je ne vois pas de problème avec votre approche. J'utilise habituellement un singleton pour gérer cette situation:

 // MyCommon.h:
@interface MyCommon
class MyCommon : NSObject
{
    int user;
};

@property(assign) int user;

+ (MyCommon *)singleton;

@end

// MyCommon.m:
@implementation MyCommon

static MyCommon * MyCommon_Singleton = nil;

+ (MyCommon *)singleton
{
    if (nil == MyCommon_Singleton)
    {
        MyCommon_Singleton = [[MyCommon_Singleton alloc] init];
    }

    return MyCommon_Singleton;
}
@end 

Le singleton MyCommon est ensuite utilisé n'importe où dans mon application, comme suit:

 int user = [MyCommon singleton].user; 

3voto

Jason Coco Points 52303

Habituellement, vous demanderiez ces informations au contrôleur de votre application et il lui incomberait de savoir comment le stocker / le rechercher dans n'importe quel modèle de données existant. Le contrôleur de votre application peut être ou ne pas être identique au délégué des applications (dans la plupart des applications simples, c'est la même chose).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X