0

这是我的代码

- (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]错误。我找不到如何解决这个错误。

请帮忙。

4

3 回答 3

3

虽然CatArraycount 被检查ListOfArraycount 不是。

打开异常中断并找出导致异常的行。 在此处输入图像描述

另请注意,返回 nil 是一个错误,来自文档:

继承自 UITableViewCell 的对象,表视图可用于指定行。如果您返回 nil,则会引发断言。——</p>

于 2013-05-26T15:32:40.133 回答
1

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

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

如果您的代码正确回答 numberOfRowsInSection 并使用适当数组的计数,则永远不会发生这种情况。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return (searching)? [ListOfArray count] : [CatArray count];
}
于 2013-05-26T15:33:24.980 回答
0

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

这里的消息:index 1 beyond bounds [0 .. 0]表示您正在寻找索引 1 处的对象,但数组本身只有索引 0 到 0 之间的对象。数组索引从 0 开始。

首先尝试检查您的CatArrayListOfArray是否有您想要的对象。另外,检查您如何计算 table view data source 的返回值numberOfRowsInSection

于 2013-05-26T15:29:14.177 回答