цель C Итерация вызова метода - PullRequest
2 голосов
/ 28 июня 2011

Как я могу повторить вызов метода, например.

[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' ] 

Ответы [ 2 ]

4 голосов
/ 28 июня 2011

Вы должны переосмыслить свой дизайн и подход к этому ... Вместо того, чтобы иметь 20 имен методов -revertBoxN, как насчет создания одного метода:

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

Затем вам придется заменить свой список иваров (пример N) на массив C определенного размера.

Вы можете использовать краткий цикл, чтобы перебирать элементы и избегать повторяющегося кода.

Надеюсь, вы сможете следовать тому, что я говорю ... Не думаю, что мне нужно было бы вдаваться в подробности (в противном случае вы должны изучить основы Objective-C (включая C!).

3 голосов
/ 28 июня 2011

Если вы хотите повторить вызовы метода,

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

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

Если вы хотите повторить имя класса, вы можете сделать это,

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];
}
...