Objective-C变量动态命名/引用在运行时

时间:2011-12-06 13:48:21

标签: objective-c variables

我有一个变量名称引用了Objective C guru的问题。

假设我在表单上有6个UILabel,设置的属性命名为myLabel1 - myLabel6

我想通过for循环并根据循环填充这些东西,但我不确定如何指定for循环变量并使其成为标签名称的一部分。

以下是我想做的事情:

for (int LP = 0; i <5)
{

    labelLP.text = [NSString stringWithFormat:@"My label number:%d", LP};
}

我不确定如何引用标签并附加LP int并在我的循环中使用它。我确定有办法做到这一点,不知道如何......任何人?

3 个答案:

答案 0 :(得分:5)

你总是可以利用objective-c的动态运行时:

id var = object_getIvar(self,class_getInstanceVariable([self class], [[NSString stringWithFormat:@"label%d",LP] UTF8String]));

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

答案 1 :(得分:2)

是否喜欢这种方法是一种风格问题,但这是一种应该有效的方法:

for (int LP = 1; i <=6)
{
    NSString *labelName = [NSString stringWithFormat: @"label%d", i];
    UILabel *labelLP = (UILabel*)[self valueForKey: labelName];
    labelLP.text = [NSString stringWithFormat:@"My label number:%d", LP};
}

答案 2 :(得分:1)

我不认为你可以动态创建变量名,至少不是那么简单。

你总是可以在你的循环中使用一个开关盒:

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

    switch(i) {

        case 1:
            myLabel1.text = [NSString stringWithFormat:@"My label number: %d", i];
            break;
        case 2:
            myLabel2.text = [NSString stringWithFormat:@"My label number: %d", i];
            break;
        ...
        ...
    }
}

您还可以将标签存储在数组中,然后遍历该数组。

重点不是要注意变量名称,而是要考虑为什么需要你的对象以及如何获取它们。