Прежде всего, вам нужно использовать массивы для двух верхних уровней вашей структуры данных. Словари не упорядочены, что затрудняет их использование в качестве источника данных для формата таблицы. Можно использовать их для данных каждой записи, отображаемой в отдельной ячейке. Чтобы использовать словари в качестве данных табличного формата, необходимо сохранить их ключи в массиве, чтобы у каждого ключа был определенный числовой индекс, который таблица может использовать для поиска ключа.
В вашем классе UITabelViewDataSource вам потребуется что-то вроде следующего:
@property(nonatomic, retain) NSArray *sectionNames;
...
NSArray *sectionNames=[teams allKeys];
В вашем классе UITabelViewDataSource вам понадобятся следующие методы:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return [self.sectionNames count];
}
Возвращает количество разделов в таблице, которое в вашем случае представляет количество объектов в вашем словаре верхнего уровня.
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section{
return [[teams valueForKey:[self.sectionNames objectAtIndex:section] count];
}
Возвращает количество строк в каждом разделе, которое в вашем случае означает количество объектов в каждом словаре второго уровня, возвращаемое для ключа, сохраненного в каждом элементе sectionName.
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return [self.sectionNames objectAtIndex:section];
}
Возвращает имя, которое будет отображаться для каждого заголовка раздела, которое в вашем случае является ключом для каждого значения словаря первого уровня.
Если у вас нет особой необходимости ссылаться на разделы по ключу, вам следует подумать о том, чтобы хранить все, кроме командных данных, в массивах, а не в словарях. Это облегчит вам реализацию таблиц.