Изменение имен переменных во время выполнения в target-c / iPhone - PullRequest
0 голосов
/ 28 октября 2011

У меня есть цикл, который подсчитывает, сколько элементов в массиве, затем мне нужно создать UIView на основе индекса, на который в данный момент ссылаются в данный момент. Например, у меня есть:

int itn2 = 0;
    while(itn2 < [imageLinks count]){
//imageLinks is my NSMutableArray
    NSURL * imageURL = [NSURL URLWithString:[imageLinks objectAtIndex:itn2]];
    NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
    UIImage *image = [UIImage imageWithData:imageData];

Мне нужно, чтобы UIImageView, который я выделяю, имел имя на основе текущего целого числа itn2 (0), например:

    [viewVar%i,itn2] = [[UIImageView alloc] initWithImage:image];

так что когда цикл изменится, скажем, с 0 на 2, у меня будет 3 UIViews, называемых viewVar0, viewVar1, viewVar2, как я могу это сделать ?? Я привык к matlab, где я могу просто сделать viewVar (itn2).

1 Ответ

1 голос
/ 28 октября 2011

Не думаю, что вы можете легко создавать переменные на лету.

Я бы использовал изменяемый массив для хранения UIImageViews:

NSMutableArray *imageViews = [NSMutableArray arrayWithCapacity:[imageLinks count]];
for(NSUInteger i=0; i < [imageLinks count]; i++) {
    UIImage *image = [[UIImage imageWithData:[NSData dataWithContentsOfURL:[imageLinks objectAtIndex:i]]];
    [imageViews addObject:[[UIImageView alloc] initWithImage:image]];
}

Затем используйте [imageViews objectAtIndex:0] для первого и т. Д. Если это то, что вы много делаете в своем приложении, вы можете добавить такой макрос:

#define IV(idx) (idx < [imageViews count] ? [imageViews objectAtIndex:idx] : nil)

чтобы написать [someView addSubview:IV(0)] или что вам нужно. Но я не рекомендую это.

(Примечание: вам нужно autorelease кое-что, если вы не используете ARC)

...