0

我用这个语句初始化了一个NSArraymade of UILabels(实际的指针是在 .h 文件中创建的):

interLabels = [NSArray arrayWithObjects:inter1,inter2,inter3, nil];

后来我有一个IBAction响应的方法,应该在单击按钮时更新标签数组:

-(IBAction)intervalButton:(id)sender{
    int count = 0;
    double val[3];
    if(count < 3){
        val[count] = number;
        [interLabels objectAtIndex:count].text = [NSString stringWithFormat:@"%.2f", val[count]];
        count++;
    }
}

但是,[interLabels objectAtIndex:count]似乎没有被识别为UILabel对象,所以我收到一个编译器错误,指出在对象类型“id”上找不到属性“text”。如何让编译器将其识别为UILabel? 这是一个可以通过类型转换解决的问题吗?

4

2 回答 2

1

objectAtIndex 会返回一个“id”类型的引用。您需要在编译器/IDE 识别文本属性之前将其转换为 UILabel。

例如 ((UILabel*) [interLabels objectAtIndex:count]).text = ...

于 2013-11-04T20:12:56.857 回答
0

如果将类型id分配给另一个变量,则不需要强制转换类型。在您的情况下,我认为这会更好,因为您实际上做了两件事,首先从数组中获取一个对象,然后更改该对象的状态。考虑一下。

    -(IBAction)intervalButton:(id)sender
    {
        for ( UILabel *label in interLabels )
        { 
            label.text = [NSString stringWithFormat:@"%.2f", number];
        }
    }

我假设您想要一个循环而不是 if 语句,因为 if 语句总是评估为 YES。我还假设number是您班级中的一个实例变量。

实际上,当我再次查看代码时,您可能可以删除大部分代码。

于 2013-11-04T20:22:46.393 回答