What would be a good data structure for UITableView in grouped mode

objective-c, uitableview

Solution

For example an array of dictionaries, where each dictionary holds the title and all items of one section:

NSArray *dataSource = @[
                    @{@"title": @"Section 0",
                      @"rows" : @[ item00, item01, item02] },
                    @{@"title": @"Section 1",
                      @"rows" : @[ item10, item11, item12] },
                    @{@"title": @"Section 2",
                      @"rows" : @[ item20, item21, item22] },
                    ];

The items can be strings or objects of a custom class. Then you can access each item in `cellForRowAtIndexPath` like

Item *item = dataSource[indexPath.section][@"rows"][indexPath.row];

and all other data source methods are also easily implemented.

Problem

Usually I store data in an array. Then, when cellForRowAtIndexPath is called I just look at row and select an item on the array based on row and process. But UITableView as we know can do group view. So what should I do? Should I have an array of array? An NSDictionary of array? What would be the most elegant way to store data in UITableView structure?

Original source