2017-06-07 3 views
0

Je reçois une erreur tout en déplaçant la vue table extensible vers le haut et vers le bas. Ceci est mon erreur * Mettre fin application en raison d'une exception non interceptée 'NSRangeException', raison: '* - [__ NSSingleObjectArrayI objectAtIndex:]: index 3 au-delà des limites [0 .. 0]'Erreur lors du déplacement de la vue de table extensible?

arr = [[NSArray alloc]initWithObjects:@"obj1",@"obj2",@"obj3",@"obj4",nil]; 
arr1 = [[NSArray alloc]initWithObjects:@"Name1", @"name2", @"name3", @"name4", @"name5", @"name6", nil]; 
arr2 = [[NSArray alloc]initWithObjects:@"arr2obj", nil]; 
arr3 = [[NSArray alloc]initWithObjects:@"arr3obj", nil]; 
arr4 = [[NSArray alloc]initWithObjects:@"arr4obj", nil]; 

C'est mon code ...

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if ([arrSelectedSectionIndex containsObject:[NSNumber numberWithInteger:section]]) 
    { 
     if (section == 0) { 
      return arr1.count; 
     } else if (section == 1) { 
      return arr2.count ; 
     } else if (section == 2) { 
      return arr3.count; 
     }else if (section == 3) { 
      return arr4.count; 
     } 
    } else { 

     return 0; 
    } 

} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ViewControllerCell *cell; // = [tableView dequeueReusableCellWithIdentifier:@"ViewControllerCell"]; 


    cell= (ViewControllerCell *)[tableView dequeueReusableCellWithIdentifier:@"ViewControllerCell" forIndexPath:indexPath]; 

    cell.faqLbl.text = [tempArr objectAtIndex:indexPath.row]; 
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

    return cell; 
} 

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection: (NSInteger)section 
{ 
    ViewControllerCellHeader *headerView = [tableView dequeueReusableCellWithIdentifier:@"ViewControllerCellHeader"]; 

    headerView.faqLblTitle.numberOfLines = 0; 
    headerView.faqLblTitle.lineBreakMode = NSLineBreakByWordWrapping; 
    headerView.faqLblTitle.font = [UIFont fontWithName:@"Helvetica-Bold" size:15.0]; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     headerView.faqLblTitle.font = [UIFont fontWithName:@"Helvetica-Bold" size:25.0]; 

    } 

    if (headerView ==nil) 
    { 
     [tblView registerClass:[ViewControllerCellHeader class] forCellReuseIdentifier:@"ViewControllerCellHeader"]; 

     headerView = [tableView dequeueReusableCellWithIdentifier:@"ViewControllerCellHeader"]; 
    } 

    headerView.faqLblTitle.text = [arr objectAtIndex:section]; 

    if ([arrSelectedSectionIndex containsObject:[NSNumber numberWithInteger:section]]) 
    { 
     headerView.faqBtnShowHide.selected = YES; 
    } 

    [[headerView faqBtnShowHide] setTag:section]; 
    headerView.faqBtnShowHide.tag = section; 

    [[headerView faqBtnShowHide] addTarget:self action:@selector(btnTapShowHideSection:) forControlEvents:UIControlEventTouchUpInside]; 

    return headerView.contentView; 
} 

-(IBAction)btnTapShowHideSection:(UIButton*)sender 
{ 
    if (!sender.selected) 
    { 
     [arrSelectedSectionIndex addObject:[NSNumber numberWithInteger:sender.tag]]; 

     sender.selected = YES; 
    }else{ 
     sender.selected = NO; 

     if ([arrSelectedSectionIndex containsObject:[NSNumber numberWithInteger:sender.tag]]) 
     { 
      [arrSelectedSectionIndex removeObject:[NSNumber numberWithInteger:sender.tag]]; 
     } 
    } 

    [tblView reloadSections:[NSIndexSet indexSetWithIndex:sender.tag] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 

    - (IBAction)dropDownButton:(UIButton *)sender { 

     if(sender.tag == 0) { 
      tempArr = arr1; 
     } else if (sender.tag == 1) { 
      tempArr = arr2; 
     } else if (sender.tag == 2) { 
      tempArr = arr3; 
     } else if (sender.tag == 3) { 
      tempArr = arr4; 
     } 
} 
+0

À quoi sert la méthode - (IBAction) dropDownButton: (UIButton *) sender? –

+0

il est assigner tableau à dynamiquement pour les cellules .... – iOS

+0

Quand il sera appelé? –

Répondre

0
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(indexPath.section == 0) { 
     tempArr = arr1; 
    } else if (indexPath.section == 1) { 
     tempArr = arr2; 
    } else if (indexPath.section == 2) { 
     tempArr = arr3; 
    } else if (indexPath.section == 3) { 
     tempArr = arr4; 
    } 

    ViewControllerCell *cell; // = [tableView dequeueReusableCellWithIdentifier:@"ViewControllerCell"]; 


    cell= (ViewControllerCell *)[tableView dequeueReusableCellWithIdentifier:@"ViewControllerCell" forIndexPath:indexPath]; 

    cell.faqLbl.text = [tempArr objectAtIndex:indexPath.row]; 
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

    return cell; 
} 

Vous appeliez section reload sans initialiser tempArrnumberOfRowsInSection envisage les sources de données réelles comme arr1, arr2 etc, mais cellForRowAtIndexPath dépend de tempArr pour remplir la cellule. Évidemment, si la valeur de tempArr n'est pas la même que la source de données réelle qui a renvoyé le nombre de cellules, elle va se casser.

+0

ça ne fonctionne pas ... – iOS

+0

@ ios-développeur: Désolé mon erreur lemme mettre à jour la réponse –

+0

@ ios-développeur: S'il vous plaît voir la réponse édité –