[__NSArrayM objectAtIndex:]:超出边界的索引1 [0 .. 0]

时间:2013-05-26 14:47:38

标签: objective-c

这是我的代码

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    }

    if (indexPath.row >= [CatArray count])
    {
        return nil;
    }

    if(searching)
    {
        cell.textLabel.text=[ListOfArray objectAtIndex:indexPath.row];
    }

     else
     {
             NSString *cellv=[CatArray objectAtIndex:indexPath.row];
             cell.textLabel.text=cellv;
     }
     return cell;
}

当我点击索引0处的对象时。它工作正常但是当点击索引1及以上时我的程序显示[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]错误。我找不到如何修复此错误。

请帮忙。

3 个答案:

答案 0 :(得分:3)

检查CatArray计数时ListOfArray计数不是。

打开异常中断并找出导致异常的行。 enter image description here

另请注意,从docs:

返回nil是一个错误
  

从表视图可以使用的UITableViewCell继承的对象   对于指定的行。如果你返回零,则会引发断言。 -

答案 1 :(得分:1)

您应重新考虑代码的提示将出现在cellForRowAtIndexPath方法中:

if (indexPath.row >= [CatArray count])
{
    return nil;
}

如果你的代码正确地回答了numberOfRowsInSection,那么这个条件永远不会发生,并带有相应数组的计数。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return (searching)? [ListOfArray count] : [CatArray count];
}

答案 2 :(得分:0)

错误信息应该非常清楚,您正在寻找索引中超出数组范围的对象。

这里的消息:索引1超出边界[0 .. 0] 意味着你在索引1处寻找对象,但是数组本身只有索引在0到0之间的对象。数组index从0开始。

尝试检查 CatArray ListOfArray 是否具有您想要的对象。另外,检查如何计算表视图数据源numberOfRowsInSection的返回值。