«Настоящий» ответ на этот вопрос состоит в том, чтобы объявить ваши метки с @property
(что они, вероятно, уже есть), а затем сделать:
for (int i = 0; i < 47; ++i) {
NSString * labelName = [NSString stringWithFormat:@"label%d", i];
UILabel * currentLabel = [self valueForKey:labelName];
[currentLabel setText:(stuff)];
}
Однако реальный вопрос заключается в следующем: с какой стати у вас 47 ярлыков, на которых все изображено одно и то же, и почему на земле у них нет лучших имен?
edit получение примитивов:
Хотя можно получить значения примитивных иваров, используя такие вещи, как valueForKey:
или object_getInstanceVariable()
, тот факт, что вы запрашиваете это, является (в моей книге) признаком плохо разработанного кода. Даже не глядя на ваш код, я гарантирую вам, что есть лучший способ сделать это.
Как говорится, вот загруженный пистолет о том, как получить примитивные значения из переменных экземпляра по имени:
#import <objc/runtime.h>
//self has an ivar named "i"
int *iPtr = 0;
object_getInstanceVariable(self, "i", (void**)&iPtr);
NSLog(@"%d", (int)iPtr);
Однако, если вы когда-нибудь будете использовать этот код в производственной среде для чего-либо, кроме явной отладки чего-либо, то я бы сказал, что вы заслуживаете любых сбоев, которые вы получаете. (Не то, чтобы этот код был подвержен сбоям, а скорее, что он, вероятно, будет представлять остальную часть кода)