2010-06-22 9 views
1

J'ai un UITableView qui a été créé à partir de données provenant d'un tableau mutable.iPhone - Source de données UITableView?

C'est un tableau de dictionnaires. Ainsi, afin de remplir ma table, je l'ai fait quelque chose comme

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

... 

NSDictionary *umObject = (NSDictionary*)[listaDeObjectos objectAtIndex:indexPath.row]; 
NSString *oneName = [umObject objectForKey:@"name"]; 

[cell setText:oneName]; 

... 

} 

Cela fonctionne très bien, mais maintenant je suis en train de mettre en œuvre une recherche sur ce tableau. J'ai lu un tutoriel où le gars utilise une méthode de recherche comme celui-ci ...

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [searchedData removeAllObjects];// remove all data that belongs to previous search 
    if([searchText isEqualToString:@""] || searchText==nil){ 
     [myTableView reloadData]; 
     searching = NO; 
     return; 
    } 

    searching = YES; 
    NSInteger counter = 0; 
    for(NSString *name in dataSource) 
    { 
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
     NSRange r = [name rangeOfString:searchText]; 
     if(r.location != NSNotFound) 
       [searchedData addObject:name]; 
     counter++; 
     [pool release]; 
    } 
    [myTableView reloadData]; 
} 

comme vous pouvez le voir, il a cette ligne

for(NSString *name in dataSource) 

où le nom est une entrée de dataSource (??) Cela ressemble à la table étant peuplée à partir d'une sorte de tableau, mais, autant que je sache, ma table n'a pas été remplie à partir d'un tableau directement, mais à partir des valeurs que j'ai extraites sur la première partie de mon code, un par un.

Je ne sais pas si je compris le concept de source de données.

J'ai lu les documents, mais je ne suis toujours pas à comprendre.

Quelle est cette source de données? Est-ce que ma table en a une? Si non, comment puis-je rechercher ma table?

Cay vous m'aidez?

grâce

Répondre

2

Votre source de données est votre classe où vous avez toutes ces UITableView méthodes connexes (tableView:cellForRowAtIndexPath: etc.). Cette classe doit adopter le protocole UITableViewDataSource.

Lorsque vous fournissez des données pour chacun de vos cellules, vous le prenez de votre tableau listaDeObjectos. Lorsque vous effectuez une recherche, vous ne souhaitez fournir que plusieurs éléments de votre tableau, ces éléments doivent adopter vos critères de recherche.

Alors, quand vous n'êtes pas en mode « recherche », vous devez fournir les données de votre tableau (listaDeObjectos). Lorsque vous êtes en «mode de recherche», vous devez fournir des données provenant d'une matrice distincte qui ne doit contenir que des éléments spécifiques qui adoptent vos critères de recherche. UISearchBar appels searchBar:textDidChange: méthode où vous devez vérifier chaque élément de votre tableau listaDeObjectos, et si cet élément est bon pour le texte de recherche fourni par UISearchBar, ajouter cet élément à ce tableau séparé. Ensuite, vous appelez la méthode reloadData qui provoque l'appel de toutes les méthodes de vue de table. Donc, l'idée est de fournir des données à partir de "tableau de recherche" si vous êtes à la recherche, et de listaDeObjectos si vous n'êtes pas la recherche.

+0

merci !!!!!!!!! – SpaceDog

2

Je ne sais pas l'autre source, mais je pense qu'il a utilisé son propre tableau pour les données. Donc, vous devriez probablement faire quelque chose comme

for (NSDictionary *dict in listaDeObjectos) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    NSString *oneName = [dict objectForKey:@"name"]; 

    NSRange r = [name rangeOfString:searchText]; 
    if(r.location != NSNotFound) 
     [searchedData addObject:name]; 
    counter++; 
    [pool release]; 
} 

à la place.

+0

merci! Votre message a complété celui de beefon (+1)! – SpaceDog

Questions connexes