2011-06-28 4 views
2

Comment puis-je itérer un appel de méthode par exemple.Objectif C Méthode Iterate Appelez

[self revertBox1]; 
[self revertBox2]; 
[self revertBox3]; 
[self revertBox4]; 
[self revertBox5]; 

// They are as many as 20. 

example1 * xmp = [[example1 alloc] initWithNibName:@"example1" bundle:nil]; 

// How can I iterate the class instantiation example1, example2, example3 

// If I use this method.. 

NSString *classNameStr = [NSString stringWithFormat:@"example%d", i]; 
Class cls = NSClassFromString(classNameStr); 
cls *obj = [[[cls alloc] initWithNibName:classNameStr bundle:nil]; 

//I receive an error [ Use of undeclared identifier 'obj' ] 

Répondre

3

Si vous voulez itérer les appels de méthode,

for (int i=0; i<20; i++) { 

    NSString *selectorNameStr = [NSString stringWithFormat:@"revertBox%d", i]; 
    SEL sel = NSSelectorFromString(selectorNameStr); 
    [self performSelector:sel]; 
} 

Si vous voulez itérer le nom de classe, vous pouvez le faire comme ça,

for (int i=0; i<20; i++) { 

    NSString *classNameStr = [NSString stringWithFormat:@"example%d", i]; 
    Class cls = NSClassFromString(classNameStr); 
    cls *obj = [[[cls alloc] initWithNibName:classNameStr bundle:nil]; 
} 
+1

intelligente, mais user797819 vraiment juste Besoins de re-factoriser un peu son code et ses déclarations d'origine. –

+0

@Coleman Stavish, Oui. Il devrait. – EmptyStack

+0

---- NSString * classNameStr = [NSString stringWithFormat: @ "exemple% d", i]; ---- Classe cls = NSClassFromString (classNameStr); ---- cls * obj = [[[cls alloc] initNithNibName: classNameStr bundle: nil]; // Utilisation de l'identificateur non déclaré 'obj' –

4

Vous devez repenser votre conception et l'approche de ce ... Au lieu d'avoir 20 noms de méthodes -revertBoxN, comment faire sur une méthode:

- (void)revertBox:(int)index { } 

Vous devrez alors remplacer votre liste de ivars (exempleN) avec un C-array d'une certaine taille.

Vous pouvez utiliser une boucle laconique pour parcourir les éléments et éviter les codes répétitifs.

Espérons que vous pouvez suivre ce que je dis ... Je ne pense pas que je devrais aller plus en détail (sinon vous devez apprendre les rudiments de Objective-C (qui comprend C!).

+0

+1 une meilleure conception. –