Получить NSNumber из массива

Я относительно новичок в Objective C и мне нужна помощь с массивами.

У меня есть список, который содержит словарь и массив NSNumber, с дополнительными массивами, которые будут добавлены позже.

NSMutableDictionary *mainArray = [[NSMutableDictionary alloc]initWithContentsOfFile:filePath];

NSArray *scoresArray = [mainArray objectForKey:@"scores"];

Мне нужно извлечь все значения из массива и подключить их к 10 UILabels, которые я настроил в конструкторе интерфейсов. Я сделал следующее, чтобы привести NSNumber к String.

NSNumber *numberOne = [scoresArray objectAtIndex:0];  
NSUInteger  intOne = [numberOne intValue];  
NSString *stringOne = [NSString stringWithFormat:@"%d",intOne];  
scoreLabel1.text = stringOne;

Это кажется очень сложным подходом, мне пришлось бы повторить 4 строки выше десять раз, чтобы получить все значения массива. Могу ли я использовать цикл for для перебора массива со всеми значениями, преобразованными в строки на выходе?

Любая информация будет принята с благодарностью.

2 ответа

Решение
// 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++;
}

РЕДАКТИРОВАТЬ

Я не уверен, почему вы хотите закомментировать _index++, Я не тестировал этот код, поэтому, может быть, я что-то упустил где-то. Но я не вижу ничего плохого в _index++ - это довольно стандартный способ увеличить счетчик.

В качестве альтернативы созданию scoreLabels массив, вы действительно можете получить tag свойство подпредставлений контроллера представления (в этом случае UILabel случаи, когда вы добавляете tag значение в Интерфейсном Разработчике).

Предполагая, что tag значение предсказуемо - например, каждый UILabel от scoreLabel1 через scoreLabel10 помечен tag равны значениям _index что мы используем в for цикл (от 0 до 9) - тогда вы можете ссылаться на UILabel непосредственно:

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

Ключ к созданию этой работы заключается в том, что tag значение должно быть уникальным для UILabel и должно быть что-то, с чем вы можете ссылаться -viewWithTag:,

Код выше очень просто предполагает, что tag значения такие же, как _index значения, но это не обязательно. (Это также предполагает UILabel экземпляры являются подпредставлениями контроллера представления view свойство, которое будет зависеть от того, как вы настроили свой интерфейс в Интерфейсном Разработчике.)

Некоторые люди пишут функции, которые добавляют 1000 или другое целое число, которое позволяет группировать типы подпредставлений вместе - UILabel экземпляры получают 1000, 1001 и так далее, и UIButton экземпляры получат 2000, 2001 и т. д.

Попробуйте использовать stringValue...

scoreLabel1.text = [(NSNumber *)[scoresArray objectAtIndex:0] stringValue];
Другие вопросы по тегам