Я бы начал с организации вашего источника данных другим способом.
Получите источник данных NSArray, который содержит 9 NSDictionaries, представляющих ваши категории. Внутри каждой категории у вас есть пара ключей - один для соответствующей строки с именем категории и один для соответствующего массива MyObjects, которые принадлежат категории:
dataSource [
item1 {
catName = @"CategoryName 1"
objects = NSArray of MyObjects for catName1
}
item2 {
catName = @"CategoryName 2"
objects = NSArray of MyObjects for catName2
}
etc...
]
Как только вы упорядочите данные таким образом, ваши методы источника данных для табличного представления будут выглядеть (концептуально):
numberOfSections можно получить с помощью [datasource count]
titleForSection можно получить с помощью [[datasource objectAtIndex:indexPath.section] valueForKey:@"catName"]
numberOfRowsInSection можно получить с помощью [[[datasource objectAtIndex:indexPath.section] valueForKey:@"objects"] count]
И, наконец, к MyObject для каждой строки можно получить доступ с помощью [[[datasource objectAtIndex:indexPath.section] valueForKey:@"objects"] objectAtIndex:indexPath.row]
в cellForRowAtIndexPath: метод.
Имеет смысл?
Дайте знать, если у вас появятся вопросы.
Ура,
Рог
[РЕДАКТИРОВАТЬ, ЧТОБЫ ОТВЕТИТЬ НА СЛЕДУЮЩИЙ ВОПРОС]
Это основано на нескольких предположениях, но вы должны понять суть этого. Для проверки этого я создал класс MyObject, который возвращает экземпляр со случайно сгенерированными именами категорий.
- (void)createDatasource
{
NSInteger numberOfObjects = 10;
NSMutableArray *objects = [NSMutableArray arrayWithCapacity:numberOfObjects];
NSMutableArray *categories = [NSMutableArray arrayWithCapacity:numberOfObjects];
for (int i = 0; i < numberOfObjects; i++)
{
MyObject *obj = [[MyObject alloc] init];
[objects addObject:obj];
[categories addObject:obj.category];
[obj release];
}
NSSet *set = [NSSet setWithArray:categories];
NSMutableArray *dataSource = [[NSMutableArray alloc] initWithCapacity:[set count]];
for (NSString *categoryString in set)
{
NSMutableDictionary *mainItem = [[NSMutableDictionary alloc] initWithObjectsAndKeys:nil, @"categoryName", nil, @"myObjects", nil];
NSMutableArray *mainItemMyObjects = [NSMutableArray array];
[mainItem setValue:categoryString forKey:@"categoryName"];
for (MyObject *obj in objects)
{
if ([obj.category isEqualToString:categoryString])
{
[mainItemMyObjects addObject:obj];
}
}
[mainItem setValue:mainItemMyObjects forKey:@"myObjects"];
[dataSource addObject:mainItem];
[mainItem release];
}
NSLog (@"objects = %@\ncategories = %@\nset = %@\ndatasource = %@", objects, categories, set, dataSource);
// Use and release your datasource as appropriate
// You may want to sort your datasource appropriately depending on your needs
}