NSPredicar en NSDictionary

Estoy tratando de hacer secciones en una vista de tabla basada en el alfabeto y ordenar mis entradas alfabéticamente en estas secciones.

He recopilado la primera letra en cada entrada de bandsArray en bandsArrayIndex y ahora estoy tratando de usar NSPredicate para contar cuántas de cada letra hay.

Estoy haciendo esto siguiendoesta guia.

Están usando un NSArray y yo estoy usando un NSDictionary y parece que no puedo hacer que funcione. ¿Puede alguien ayudarme?

La aplicación se bloquea al intentar mostrar la vista con la vista de tabla. En la consola del depurador se muestra el siguiente error:

* Finalización de la aplicación debido a la excepción no detectada 'NSInvalidArgumentException', razón: 'No se puede realizar una operación de subcadena con algo que no sea una cadena

Este es mi codigo

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSString *alphabe,t = [bandsArrayIndex objectAtIndex:section];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
    NSArray *letters = [bandsArray filteredArrayUsingPredicate:predicate];

    return [letters count];
}

EDITAR: Esta es mi banda Array.

El encabezado

NSMutableArray *bandsArray;

@property (nonatomic, retain) NSMutableArray* bandsArray;

La implementación

// set array from plist
NSString *path = [[NSBundle mainBundle] pathForResource:@"Bands" ofType:@"plist"];
NSMutableArray* tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

self.bandsArray = tmpArray;

// sort array after name ascending
NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
[bandsArray sortUsingDescriptors:[NSArray arrayWithObject:nameSorter]];

Respuestas a la pregunta(3)

Su respuesta a la pregunta