// create NSMutableArray* of score UILabel items, called "scoreLabels"
NSMutableArray *scoreLabels = [NSMutableArray arrayWithCapacity:10];
[scoreLabels addObject:scoreLabel1];
[scoreLabels addObject:scoreLabel2];
// ...
NSUInteger _index = 0;
for (NSNumber *_number in scoresArray) {
UILabel *_label = [scoreLabels objectAtIndex:_index];
_label.text = [NSString stringWithFormat:@"%d", [_number intValue]];
_index++;
}
EDIT
I'm not sure why you'd want to comment out _index++
. I haven't tested this code, so maybe I'm missing something somewhere. But I don't see anything wrong with _index++
— that's a pretty standard way to increment a counter.
As an alternative to creating the scoreLabels
array, you could indeed retrieve the tag
property of the subviews of the view controller (in this case, UILabel
instances that you add a tag
value to in Interface Builder).
Assuming that the tag
value is predictable — e.g., each UILabel
from scoreLabel1
through scoreLabel10
is labeled with a tag
equal to the values of _index
that we use in the for
loop (0 through 9) — then you could reference the UILabel
directly:
// no need to create the NSMutableArray* scoreLabels here
NSUInteger _index = 0;
for (NSNumber *_number in scoresArray) {
UILabel *_label = (UILabel *)[self.view viewWithTag:_index];
_label.text = [NSString stringWithFormat:@"%d", [_number intValue]];
_index++;
}
The key to making that work is that the tag
value has to be unique for the UILabel
and must be something you can reference with -viewWithTag:
.
The code above very simply assumes that the tag
values are the same as the _index
values, but that isn't required. (It also assumes the UILabel
instances are subviews of the view controller's view
property, which will depend on how you set up your interface in Interface Builder.)
Some people write functions that add 1000 or some other integer that allows you group types of subviews together — UILabel
instances get 1000, 1001, and so on, and UIButton
instances would get 2000, 2001, etc.