2012-05-06 5 views
0

Je souhaite implémenter quelque chose de similaire à la liste de contacts de l'iPhone. Je sais qu'il existe un cadre de carnet d'adresses qui me permet d'accéder aux contacts de l'appareil, mais je veux utiliser mes propres contacts stockés dans ma base de données de base de données. J'utilise NSFetchedResultsController pour récupérer et lister mes contacts sur une vue de table.iOS implémentant un "Contact View Controller"

Cependant, je n'arrive pas à trouver un moyen d'afficher NSFetchedResultsController mes contacts organisés par section, chaque section étant la première lettre du nom de chaque contact. Comme:

Section A: All contacts that start with the letter A 
Section B: All contacts that start with the letter B 
etc... 

Je pense que je peux le faire avec le paramètre sectionNameKeyPath: dans la méthode init pour NSFetchedResultsController, mais comment suis-je censé l'utiliser pour atteindre mes objectifs?

+0

J'ai résolu mon problème en suivant les réponses sur cette question http://stackoverflow.com/questions/1112521/nsfetchedresultscontroller-with-sections-created-by-first-letter- d'une chaîne –

Répondre

1

Vous devez d'abord trier vos données et obtenir une liste des «clés» (A, B, C, D, E) pour chaque section. Enregistrez-les en tant que NSArray sur une propriété.

Mettre en oeuvre ceci:

// Function to load your data 
-(void)dataDidLoad 
{ 
// sort the keys 
     self.sortedKeysForUsersWithApp = tSortedKeys; 
// 
     [self.tableView reloadData]; 
} 
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
// add a UILabel 
    headerLabel.text = [self.sortedKeysForUsersWithApp objectAtIndex:section]; 
// set the text to the section title 
} 

-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    return [NSArray arrayWithObjects:@"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]; 
} 

-(NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { 
    //return [self.sortedKeys indexOfObject:title]; 
    return [self.sortedKeysForUsersWithApp indexOfObject:title]; 
} 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    //return self.sortedKeys.count; 
    return self.sortedKeysForUsersWithApp.count; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSDictionary *tDictionary = self.sortedUsersWithApp; 

    //NSString *key = [self.sortedKeys objectAtIndex:section]; 
    NSString *key = [self.sortedKeysForUsersWithApp objectAtIndex:section]; 
    return ((NSArray*)[tDictionary objectForKey:key]).count; 
} 
+0

Cela ne fonctionnerait pas pour moi. Je voudrais que le nombre de sections varie. Par exemple, si je n'ai aucun contact commençant par "B", je ne voudrais pas qu'une section "B" apparaisse. J'ai résolu ma question en utilisant le lien dans mon autre commentaire. –