索引1超出边界[0 .. 0]与自定义单元格和SWTableViewCell

时间:2013-12-20 10:59:41

标签: ios iphone uitableview

我正在尝试将自定义单元格添加到静态UITableViewController。我使用SWTableViewCell来获取可跳过的单元格,我正在使用自定义-xib进行单元格布局。

当我只需要使用一个单元格时,我似乎工作得很好,但当有多个单元格时,我得到了这个:Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

当我在第二个单元格出现时(当我开始滚动时)dequeueReusableCellWithIdentifier中使用cellForRowAtIndexPath时会发生这种情况。

这是我的代码:

    - (void)viewDidLoad
    {
        [super viewDidLoad];

        self.images = selectedReport.image;

        imagesArray = [self.images.allObjects mutableCopy];

        self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];    

        [self.tableView registerNib:[UINib nibWithNibName:@"PictureCell" bundle:nil] forCellReuseIdentifier:@"PictureCell"];

    }

    - (NSInteger) tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger) section
    {
        if(section == 0){
            return 10;
        }else if(section == 1){
            return imagesArray.count; //It is the second section which is dynamic
        }
        return 1;
    }


- (UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath
{
    static NSString* cellIdentifier = @"PictureCell";

    if (indexPath.section == 0 || indexPath.section == 2)
    { //Takes the rows from the storyboard
        return [super tableView:tableView cellForRowAtIndexPath:indexPath];
    }
    else
    {
        NSLog(@"%i",indexPath.row);
        NSLog(@"%i",indexPath.section);

        PictureTableViewCell *cell = (PictureTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; //Crash here when indexPath.row == 1


        [cell setCellHeight:cell.frame.size.height];
        cell.containingTableView = tableView;
        indexPath.section, indexPath.row];

        Image *tempImage = imagesArray[indexPath.row];        

        cell.image.image = [UIImage imageWithData:tempImage.image];
        cell.lblDescription.text = tempImage.image_description;

        cell.rightUtilityButtons = [self rightButtons];
        cell.delegate = self;

        return cell;

    }
}

我已经检查过,当{= 1>时,numberOfRowsInSection会返回2。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

改为使用

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

或在 viewDidLoad 中,注册类

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"PictureCell"];

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PictureCell" forIndexPath:indexPath];

}