简体   繁体   中英

Typecasting to UILabel in Objective-C

I have an NSArray made of UILabel s that I initialized with this statement (the actual pointer is created in the .h file):

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

Later on I have an IBAction method that responds and is supposed to update the array of labels when a button is clicked:

-(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++;
    }
}

However, [interLabels objectAtIndex:count] doesn't seem to be recognized as a UILabel object, so I get a compiler error that states that the property "text" cannot be found on object type "id." How can I get the compiler to recognize this as a UILabel ? Is this an issue that can be solved by typecasting?

objectAtIndex returns you an reference of type 'id'. You need to cast it to UILabel before the compiler / IDE will recognise the text property.

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

Type id does not need to be casted if you assign it to another variable. And in your case i think it would be nicer since you actually do two things, first get a object from the array and then changes state on that object. Consider this.

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

I assumed you wanted a loop not a if statement since the if statement always evaluated to YES. Also i assumed number is a instance variable in your class.

Actually when i looked at the code again you can probably remove most of it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM