2009-06-14 8 views
0

J'utilise une fonction pour remplir le dictionnaire dans un tableau voici le codecomment récupérer des valeurs de nsdictionary dans iphone?

-(void)getAllFlashCardsNames 
{ 
if ([listofitems count]==0) 
    listofitems = [[NSMutableArray alloc] init]; 
else 
    [listofitems removeAllObjects]; 

for(int i=0;i<listOfCategoryId.count;i++) 
{ 
    int j=[[listOfCategoryId objectAtIndex:i]intValue]; 
    [self getFlashCard:j];  
    NSArray *flashCardsNames = flashCardsNamesList; 
    NSArray *flashCardsids = flashCardsId; 
    NSLog(@"FLash Card Ids %@",flashCardsids);  
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:flashCardsNames,@"flashCards",flashCardsids,@"flashCardId",nil]; 
    [listofitems addObject:dictionary]; 

} 

}

dans le code ci-dessus du tableau flashcardsNamesList, flashCardsId change à chaque fois que lorsque vous appelez la fonction [auto getFlashCard: j ] j est un paramètre pour changer categoryid qui vient du tableau listOfCategoryId ..

maintenant comment puis-je récupérer des valeurs du dictionnaire je veux montrer différentes flashcardsNames sur différentes sections dans uitableview.

ici est le code im en utilisant pour récupérer les valeurs

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return [listofitems count]; 

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section { 
    NSDictionary *dictionary =[listofitems objectAtIndex:section]; 
    NSLog(@"dictionary=%@",dictionary); 
    NSArray *array =[dictionary objectForKey:@"flashCards"]; 
    NSLog(@"array=%@",array); 
    NSLog(@"Section Count = %d",array.count); 
    return array.count; 
} 



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    CustomCell *cell = (CustomCell *)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) {  
     cell = [[[CustomCell alloc] initWithFrame:CGRectZero  reuseIdentifier:CellIdentifier] autorelease];  
    } 

    NSDictionary *dictionary =[listofitems objectAtIndex:indexPath.section]; 
    NSArray *array =[dictionary objectForKey:@"flashCards"]; 
    NSArray *array1=[dictionary objectForKey:@"flashCardId"]; 
    NSString *cellValue=[array objectAtIndex:indexPath.row]; 
    NSString *cellValue1=[array1 objectAtIndex:indexPath.row]; 
    [cell.FlashCardsNames setText:cellValue]; 
    [cell setFlashCardId:[cellValue1 intValue]]; 
    return cell; 
} 

mais la méthode - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ne soit pas appelé

Répondre

3

mais la méthode -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath n'a pas appelé

Avez-vous défini l'objet dans lequel votre méthode est implémentée en tant que source de données de votre vue tabulaire? UITableView remet une partie du travail à un autre objet, qui doit se conformer aux protocoles UITableViewDataSource et UITableViewDelegate; vous devez ensuite définir l'objet en tant que dataSource et delegate de la vue de table, soit dans IB soit par programme (la source de données et le délégué peuvent être des objets différents, mais sont généralement le même objet). Jetez un oeil à this article qui explique plus à ce sujet; Une fois que cela a été fait, votre objet doit gérer les méthodes tableView:cellForRowAtIndexPath: et tableView:numberOfRowsInSection:, qui seront appelées sur votre objet par la vue tableau.

En outre, les lignes:

if ([listofitems count]==0) 
    listofitems = [[NSMutableArray alloc] init]; 

ne font pas de sens. Je suppose que vous vérifiez si le tableau a été alloué ou non, et sinon, pour l'allouer. Si le tableau n'a pas été alloué, ce sera nil, donc l'envoi de count n'aura aucun effet de toute façon. Si elle a été allouée précédemment, mais désallouée mais pas retourné à nil ce sera un mauvais pointeur et provoquer le plantage de votre application.

Une meilleure façon d'allouer ce serait de le faire dans votre méthode de classe awakeFromNib ou méthode applicationDidFinishLaunching:, si vous implémentez dans votre sous-classe UIApplicationDelegate. N'oubliez pas de le relâcher dans votre méthode dealloc.

+0

Avez-vous défini l'objet dans lequel votre méthode est implémentée en tant que source de données de votre vue de table? qu'est-ce que cela signifie ??? –

+0

Jetez un oeil à mon édition –

+0

la méthode tableView: numberOfRowsInSection: méthode est appelée, mais cette ligne renvoie 0 objets dans le tableau NSArray * array = [dictionnaire objectForKey: @ "flashCards"]; je suis coincé ici .. –

Questions connexes