I would suggest that you create a model, internal to your data source, that closely matches the structure of what you want to display in the outline. This has the double advantage of being easy to understand and usually efficient with regards to delegate calls.
For example, your real model might be a list of books but for display purposes you want to group them the first letter of their title (A,B,C...). Within the data source delegate you could create an array of dictionaries with this structure @{@"firstLetter":@"A", @"books":bookArray}.
. In the delegate methods you then use this new array as your model.
Of course, you need to manage this internal model but that's usually simple enough.