iOS:致命异常:NSRangeException *** - [__ NSArrayM objectAtIndex:]:索引1超出边界[0 .. 0]

时间:2014-11-12 17:39:49

标签: ios objective-c iphone crash nsarray

这是我现在收到的崩溃。有人可以帮我弄清楚如何解决这个问题吗?它发生在这一行UITableViewCell* cell=[_tableView cellForRowAtIndexPath:[_tableView indexPathForRowAtPoint:point]];我想如果我检查indexPath是否有效它会解决它,但它没有。有什么方法可以阻止这种情况发生?任何提示或建议表示赞赏。我将发布我在下面尝试做的事情。

NSIndexPath *indexPath = [_tableView indexPathForRowAtPoint:point];
if (indexPath) {
UITableViewCell* cell=[_tableView cellForRowAtIndexPath:[_tableView    indexPathForRowAtPoint:point]];
.... rest of my code
  }

3 个答案:

答案 0 :(得分:2)

您可以在初始化数组之前重新加载表视图,或者在使用它时可能是您的数组为空!

就像你使用时一样:

NSString *xyz = [self.your_array objectAtIndex:indexPath.row]; 

在cellForRowAtIndexPath中,尝试使用不会导致应用崩溃的代码!

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

static NSString *CellIdentifier = @"xyz_cell";
long nodeCount = [self.your_array count];

if (nodeCount == 0 && indexPath.row == 0)
{
    Home_CellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[Home_CellTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                       reuseIdentifier:CellIdentifier] ;
        cell.lbl.textAlignment = NSTextAlignmentCenter;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    cell.lbl.text = @"No Posts yet !";

    return cell;
}


else{

Home_CellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

if (cell == nil) {
    cell = [[Home_CellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
} // Your Code Goes HERE .... NSString *xyz = [self.your_array objectAtIndex:indexPath.row]; }

所以,对于空数组,它不会找到键值的值,你的应用程序不会崩溃!

我希望它有所帮助,

答案 1 :(得分:0)

你的tableView没有多个我怀疑的行(或者没有?)。

正如您的错误消息所示,您正在尝试引用索引1处的对象,但该数组的边界为0 .. 0。

如果您在初始化tableView之前执行此操作,则需要更改执行它的位置,或者您忘记实现tableView:numberOfRowsInSection:委托方法?

答案 2 :(得分:0)

正如你在问题中所说的那样,这一行出现错误,这意味着indexPath持有一些参考尝试更改此行

if (indexPath) {
    UITableViewCell* cell=[_tableView cellForRowAtIndexPath:[_tableView  indexPathForRowAtPoint:point]];
}

if (indexPath) {
        UITableViewCell* cell=[_tableView cellForRowAtIndexPath:indexPath]; 
    }

但是,我怀疑你的桌面视图中没有超过1个项目。