Tableau en tant que constante
6ix
Membre
Salut tout le monde,
Question qui peut paraà®tre bête, et pourtant, j'ai des difficultés... Dans mon application, j'aimerais déclarer un tableau (contenant plusieurs valeurs NSNumber) en tant que constante.
J'ai déjà un fichier Constants.h (contenant d'autres constantes avec #define x y), et voilà ce que j'ai fait pour mon tableau, mais j'ai des erreurs lors de l'accès à celui-ci:
Par exemple, en appelant [[Constants kFilterDistance] count].
Que fais-je de faux? Ou alors y a-t-il une autre manière de déclarer un talbeau comme constante?
Merci d'avance!
Question qui peut paraà®tre bête, et pourtant, j'ai des difficultés... Dans mon application, j'aimerais déclarer un tableau (contenant plusieurs valeurs NSNumber) en tant que constante.
J'ai déjà un fichier Constants.h (contenant d'autres constantes avec #define x y), et voilà ce que j'ai fait pour mon tableau, mais j'ai des erreurs lors de l'accès à celui-ci:
<br />@interface Constants : NSObject {}<br /><br />// Distance filter<br />+ (NSArray*) kFilterDistance;<br /><br />@end<br /><br />#import "Constants.h"<br />@implementation Constants<br /><br />/** Create an array of (filter) distances. */<br />+ (NSArray *)kFilterDistance {<br /> static NSArray* distances = nil;<br /> if(distances == nil) {<br /> distances = [NSArray arrayWithObjects:[NSNumber numberWithInt:0.2],<br /> [NSNumber numberWithInt:0.5],<br /> [NSNumber numberWithInt:2.0],<br /> [NSNumber numberWithInt:5.0],<br /> [NSNumber numberWithInt:10.0],<br /> nil];<br /> }<br /> return distances;<br />}<br />@end<br />
Par exemple, en appelant [[Constants kFilterDistance] count].
Que fais-je de faux? Ou alors y a-t-il une autre manière de déclarer un talbeau comme constante?
Merci d'avance!
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Dans le cas contraire, quelle serait la meilleure manière de créer un tableau en tant que constante?
Mala nous a signalé une belle solution à ce problème :
Faire un singleton ,
Faire une méthode - (NSArray *)kFilterDistances codée comme tu l'as fait
(ou créer une variable au singleton)
Tu trouveras de la doc sur les singletons dans les guides de base.
Donc j'obtiendrais mon tableau par un appel de la sorte, si je ne me trompe pas:
Ce qui me permettrait ensuite d'accéder à d'autres constantes de la même manière.
Je dois dire que je n'ai pas une grosse expérience en Objective-C, je ne connais donc pas vraiment la manière la plus élégante de déclarer ces constantes.
Je vais essayer ça, merci.
=============================================
@interface Constants : NSObject {}
// Distance filter
+ (NSArray*) kFilterDistance;
@end
=============================================
#import "Constants.h"
static NSArray* distances = nil;
@implementation Constants
/** Create an array of (filter) distances. */
+ (NSArray *)kFilterDistance {
if(distances == nil) {
distances = [NSArray arrayWithObjects:[NSArray alloc] initWithObjects:[NSNumber numberWithInt:0.2],
[NSNumber numberWithInt:0.5],
[NSNumber numberWithInt:2.0],
[NSNumber numberWithInt:5.0],
[NSNumber numberWithInt:10.0],
nil];
}
return distances;
}
@end
oui
oui, auquel cas cela marche directement, comme le suggérait Schlum
[size=12pt]Code essai[/size]
#import <Foundation/Foundation.h>
@interface Constants : NSObject {
}
@end
@implementation Constants
+(NSArray *) sharedArray {
static NSArray * array=nil;
if(nil==array) {
array=[[NSArray alloc] initWithObjects:@toto,@titi,nil];
}
return array;
}
@end
int main(int argc, char *argv[]) {
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
NSLog(@%@",[Constants sharedArray]);
NSLog(@%@",[Constants sharedArray]);
[pool drain];
return 0;
}
[size=12pt]Exécution[/size]
% gcc pgm.m -o pgm -framework Foundation
% pgm
2008-11-23 14:29:28.015 pgm[981:10b] (
  toto,
  titi
)
2008-11-23 14:29:28.017 pgm[981:10b] (
  toto,
  titi
)
Non, parce qu'il ne se remet pas à nil[/b] tout seul !