2010-08-24 5 views
0

J'ai un UITableView qui est rempli à l'aide des données de base & sqlite.Sections de regroupement UITableView

Je souhaite que les sections soient regroupées dans UITableView en fonction d'un attribut de la table de base de données. Par exemple, si j'avais un champ de catégorie dans la table de base de données appelé "type", quel serait le meilleur moyen de sectionner ces données?

J'ai vu des exemples utilisant des tableaux, mais je suis coincé avec les données de base. toutes les données sont actuellement affichées à partir de la base de données et je voudrais le découper en quelque sorte.

merci d'avance.

Répondre

2

Si vous utilisez un NSFetchedResultsController pour aller chercher vos résultats et connectez-les à votre interface utilisateur c'est assez facile. Il suffit de définir le paramètre sectionNameKeyPath: de l'appel initWithFetchRequest sur NSFetchedResultsController.

Dans cet exemple, qui n'est que légèrement modifié à partir de la référence de classe pour NSFetchedResultsController, j'ai défini un chemin de clé qui utilisera la section nommée "groupe" comme titre de section. Ainsi, si vous avez des lignes dans votre base de données avec un groupe défini sur "Chats" et d'autres lignes avec un groupe défini sur "Chiens", votre vue de table aura 2 sections - une pour les chats et une pour les chiens.

NSManagedObjectContext *context = <#Managed object context#>; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
// Configure the request's entity, and optionally its predicate. 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#Sort key#>" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] 
     initWithFetchRequest:fetchRequest 
     managedObjectContext:context 
     sectionNameKeyPath:@"groups" 
     cacheName:@"<#Cache name#>"]; 
[fetchRequest release]; 

NSError *error; 
BOOL success = [controller performFetch:&error]; 

Pour plus d'informations sur les chemins de clé, vous devez rechercher la documentation de chemin de clé dans l'ensemble de documents Xcode. Pour les cas simples cependant, c'est juste le nom d'un attribut de vos objets retournés.

+0

merci pour votre poste, que ce que je cherchais. – hanumanDev

1

J'ai trouvé un tableau très utile lors de l'utilisation de sections. Jetez un oeil à mon exemple de code

amis Trier (De CoreData)

NSMutableArray* unsortedFriends = [appDelegate.core.serviceManager.storageManager getFriendList]; 
for(ELMUser* user in unsortedFriends) { 
    if ([user.friendshipConfirmed boolValue]) { 
     if (![user.localDeleted boolValue]) { 
      [friendList addObject:user]; 
     } 
    } else { 
     if (![user.localDeleted boolValue]) { 
      [friendListUnconfirmed addObject:user]; 
     } 
    } 

} 

listOfItems = [[NSMutableArray alloc] init]; 


[listOfItems addObject:friendList]; 
[listOfItems addObject:friendListUnconfirmed]; 

Display Cell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 

    NSMutableArray *subArray = [listOfItems objectAtIndex:indexPath.section]; 
    ELMUser* user = (ELMUser*)[subArray objectAtIndex:indexPath.row]; 

.... 
+0

merci pour votre message. grandement apprécié – hanumanDev

Questions connexes