当我有多个TableView时,如何更改numberOfRowsInSection?

时间:2014-12-19 08:10:52

标签: ios objective-c iphone xcode uitableview

这是我目前的代码:

if (tableView == nearbyTV) {
    return numberOfObjects;
}
else {
    if (tableView == self.searchDisplayController.searchResultsTableView) {
        return [searchResults count];
    } 
    else {
        return [users count];
    }
}

正如您所看到的,我正在尝试根据表视图或表视图搜索显示来反映不同的索引。当用户单击按钮时,将显示第二个视图控制器。此时,如果第二个表格视图的索引超过了第一个表视图的索引,它就会崩溃,不幸的是熟悉:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 13 beyond bounds [0 .. 12]'

如何更新第二个表的行数?我也是一些如何在滚动时从其他表视图中获取信息。很沮丧。任何帮助都将非常感激。感谢。

修改

的cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        if (tableView == friendsTV || tableView == self.searchDisplayController.searchResultsTableView) {
        static NSString *simpleTableIdentifier = @"SimpleTableCell";

        SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }else{
            cell.propic.image=nil;
            cell.flashBack.backgroundColor=[UIColor whiteColor];
            [cell.button1 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        }
        if (tableView == self.searchDisplayController.searchResultsTableView) {
            cell.fullName.text = [searchResults objectAtIndex:indexPath.row];
        }
        return cell;
        }else{
            static NSString *simpleTableIdentifier = @"nearbyTableCell";

            nearbyTableCell *cell = (nearbyTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

            if (cell == nil)
            {
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"nearbyTableCell" owner:self options:nil];
                cell = [nib objectAtIndex:0];
            }else{
                cell.propic.image=nil;
                cell.flashBack.backgroundColor=[UIColor whiteColor];
                [cell.button2 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
            }
            //    NSLog(@"%@",[searchResults objectAtIndex:indexPath.row]);
            if (tableView == self.searchDisplayController.searchResultsTableView) {
                cell.fullName.text = [searchResults objectAtIndex:indexPath.row];

            }else if (tableView==nearbyTV){
                NSString *requestCombine = [NSString stringWithFormat:@"/%@",[[json objectAtIndex:indexPath.row] objectForKey:@"fbID"]];
                [FBRequestConnection startWithGraphPath:requestCombine
                                             parameters:nil
                                             HTTPMethod:@"GET"
                                      completionHandler:^(
                                                          FBRequestConnection *connection,
                                                          id result,
                                                          NSError *error
                                                          ) {
                                          cell.fullName.text=[result objectForKey:@"name"];

                                      }];
                cell.fbIDLabel.text = [[json objectAtIndex:indexPath.row] objectForKey:@"fbID"];
            }
            return cell;
        }

}

5 个答案:

答案 0 :(得分:7)

问题不在于在一个类中使用多个UITableView

从错误日志中:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 13 beyond bounds [0 .. 12]'

很明显,在cellForRowAtIndexPath方法中创建单元格时,您尝试访问索引为13的对象,而数组的长度为13,即最后一个索引为12.因此尝试调试数组并检查机制在创建单元格时从数组访问对象。可能是您正在为numberOfRowsInSection表格nearbyTV返回额外的点数。

编辑1:在项目中设置Exception Breakpoint始终是一个不错的选择,因为它会告诉您崩溃的确切代码位置。设置异常断点以跟踪发生崩溃的数组,同时访问元素以跟踪真正的问题。

编辑2:从您的cellForRowAtIndexPath方法看,searchResultsjson是两个阵列,您从中拾取要显示的对象细胞。从numberOfRowsInSection返回的行计数必须与searchResultsjson数组中的对象数匹配,以使代码正常工作。问题在于其中一个阵列。调试以查看searchResultsjson数组中存在的对象数以及从numberOfRowsInSection方法返回的行数。

答案 1 :(得分:0)

试试这段代码我希望它可能对你有用..

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        if ([tableView isEqual:nearbyTV]) 
{
            return [Your nearbyTVarray's count];
        }
        elseIf ([tableView isEqual:nearbyTV])
    {
            return [searchResults count];
        }
       return [users count];
    }

答案 2 :(得分:0)

检查返回的是哪个tableview,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
{
  if(tableView == firstTableView){ 
    return 10;
  }
  return 15;
}

它返回第一个tableView 10个单元格和其他tableviews 15个单元格。 使用你拥有的tableView修改else条件。

答案 3 :(得分:-1)

试试这个

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        if ([tableView isEqual:firstTableVIew]) 
        {
            return [array1 count];
        }
        elseIf ([tableView isEqual:secondTableView])
       {
            return [array2 count];
        }
    }

并确保在if([tableView isEqual:yourTableVIew]中添加cellForRowAtIndexPath的检查

答案 4 :(得分:-1)

还假设每个表视图都分配了自己的部分:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (section)
    {
        case 0: return [array1 count]; break;
        case 1: return [array2 count]; break;
        default: // Handle others
            break;
    }
}