37 votes

Où est le meilleur endroit pour stocker des constantes dans une application iOS?

Je développe actuellement une application qui récupère les ressources d'une API JSON.

toutes les ressources ont la même URL de base:

 http://api.mysite.com/resources.json
http://api.mysite.com/other_resources.json
 

Je souhaite stocker la chaîne http://api.mysite.com/ afin qu'elle soit disponible pour tous mes contrôleurs et modèles, en supprimant certaines duplications lors de l'écriture des URL de ressources.

Où est le meilleur endroit pour faire ça? Le fichier -prefix.pch ?

Tout conseil apprécié

65voto

ColdLogic Points 3568

Je suis d'accord avec la réponse d'Alex Coplan avec un ajout important.

Mettez toutes vos constantes dans un fichier nommé "Constants.h" (ou w / e que vous voulez)

Constants.h

 #define kFilterDate @"date"
#define kFilterRadius @"radius"
#define kFilterSort @"sort"

//Global Strings
#define kDividingString @" / "

//Strings
#define kTour @"Tour"
#define kToursKey @"tours"
 

Mais au lieu de l'importer dans n'importe quel fichier dont vous avez besoin, importez-le dans votre fichier de préfixe afin que tous vos en-têtes l'importent automatiquement tout au long de votre projet.

Project_Prefix.pch

 //
// Prefix header for all source files of the project
//

#ifdef __OBJC__
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    #import "Constants.h"
#endif
 

48voto

UIAdam Points 3945

Personnellement, je préfère utiliser des variables const plutôt que définit.

Dans un MyConstants.m fichier que j'ai:

NSString *const kXYMySiteBaseURL = @"http://api.mysite.com/";
NSString *const kXYSomeOtherURL = @"http://www.google.com/";

où XY est mes initiales ou d'une autre "uniques" préfixe pour éviter les collisions avec d'autres constantes.

Ensuite, j'ai un MyConstants.h fichier comme ceci:

extern NSString *const kXYMySitBaseURL;
extern NSString *const kXYSomeOtherURL;

En fonction du nombre de fichiers pour accéder à ces constantes, je pourrais l'inclure dans l'en-tête précompilé comme ColdFusion l'indique dans sa réponse.

C'est la façon dont Apple définit leurs constantes dans la plupart des cadres de Base.

11voto

Alex Coplan Points 6450

Je viens de créer un fichier appelé Globals.h avec quelque chose comme:

 #define kBaseURL @"http://api.mysite.com/"
 

Puis utiliser:

 #import "Globals.h" // at the top

NSString *url = [NSString stringWithFormat:@"%@resources.json",kBaseURL];
 

4voto

Oscar Gomez Points 12966

Je voudrais créer un singleton ou utiliser le AppDelegate et y mettre les constantes.

4voto

Half_Duplex Points 158

Oui, un en-tête global serait une solution idéale. Je n'irais pas aussi loin qu'un motif singleton à moins que je prévoie de l'utiliser pour autre chose, comme la gestion de votre magasin de données. Un singleton pour globals est un peu exagéré.

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