2011-12-30 5 views
5

Implementé una tabla llena de datos básicos y ahora estoy tratando de indexarla con secciones mostrando el alfabeto lateral (en el formato de contactos).Índice del alfabeto completo para secciones en datos básicos

En el siguiente código, si uso la línea comentada, solo tengo letras para las secciones existentes. Pero quiero todo el alfabeto, por lo que he cambiado el conjunto devuelto:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 
{  
    //return [fetchedResultsController sectionIndexTitles];  

    indexArray = [NSArray arrayWithObjects: @"{search}", @"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J",@"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", @"#", nil]; 
    return indexArray; 
} 

Todas las letras se muestran en el índice lateral. Pero ahora tengo que poner en práctica el método que devuelve el índice de la sección seleccionada, y aquí me he algunos problemas:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 
{ 
    //return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index]; 

    NSString *correspondingLetter = [indexArray objectAtIndex:index]; 
    NSUInteger correspondingIndex = [[fetchedResultsController sections] indexOfObject:correspondingLetter]; 

    NSLog(@"------index:%i\ncorrespondingLetter: %@\ncorrespondingIndex: %i\n", index,correspondingLetter, correspondingIndex); 

    return correspondingIndex; 
} 

Con el código anterior, si uso la línea comentada, tengo un error cada vez que selecciono una letra que no tiene la sección correspondiente. Entonces, lo que trato de hacer es recuperar el índice de sección usando la letra que se ha seleccionado y buscando su posición en las secciones existentes. Pero no funciona. ¿Tiene alguna idea?

Gracias de antemano, Yassa

Respuesta

5

Usted debe buscar en

@property (nonatomic, readonly) NSArray *sectionIndexTitles 

del fetchedResultController.
Pero, si se trata de un índice que no existe, recibirá NSNotFound y será necesario hacer un poco de lógica para devolver el índice anterior carta, o el anterior o los anteriores, etc.

+1

Increíble, estaba frente a mí y no lo vi !! :) Como sugirió, fue suficiente hacer lo siguiente: 'correspondiendoIndex = [[fetchedResultsController sectionIndexTitles] indexOfObject: correspondiendoLetter];'. Muchas gracias !!! – yassassin

2

para admitir idiomas adicionales que no usaría caracteres codificados. Mi solución inspirada en la respuesta aceptada:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 
{ 
    return [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles]; 
} 


- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 
{ 
    NSString *correspondingLetter = [[[UILocalizedIndexedCollation currentCollation] sectionIndexTitles] objectAtIndex:index]; 
    return [[self.fetchedResultsController sectionIndexTitles] indexOfObject:correspondingLetter]; 
} 
Cuestiones relacionadas