2017-06-07 23 views
0

拡張可能なテーブルビューを上下に移動しているときにエラーが発生します。 これは、キャッチされない例外により 'NSRangeException' にアプリを終了*理由私のエラー です: '* - [__ NSSingleObjectArrayI objectAtIndex:]:範囲外のインデックス3 [0 .. 0]'拡張可能なテーブルビューを移動中にエラーが発生しましたか?

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]; 

これがされ私のコード...

-(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

- (IBAction)dropDownButton:(UIButton *)送信者メソッドの使用方法は何ですか? –

+0

これは、セルの配列を動的に割り当てる.... – iOS

+0

呼び出されるのはいつですか? –

答えて

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; 
} 

あなたはARR2など、ARR1などの実際のデータソースを検討しているtempArrnumberOfRowsInSectionを初期化せずにリロードセクションを呼んでいたが、 cellForRowAtIndexPathは、細胞を移植するためにtempArrに依存します。明らかに、tempArrの値が、セルの数を返した実際のデータソースと同じでない場合、破損します。

+0

それは動作していません... – iOS

+0

@ ios-developer:申し訳ありませんが私の間違いは答えを更新します –

+0

@ ios-developer:編集された答えをご覧ください –

関連する問題