2012-07-21 61 views
0

起初我的表格视图是空的,然后你可以添加你自己的单元格。当你删除这些单元格时,一切正常。但是,如果你删除最后一个单元格,然后我的NSMutableArray中有没有对象,我在我的控制台得到这个错误(也,我使用的核心数据,以节省电池):当数组为空时停止Tableview崩溃?

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFBatchFaultingArray objectAtIndex:]: index (123150308) beyond bounds (1)' 

我也试图把在这行代码,但我仍然得到同样的结果:

//arr is my mutable array 
     if ([arr count] == 0) { 
     NSLog(@"No Cells"); 
    } 

这是我从表视图中删除的对象:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [arr removeObjectAtIndex:0]; 
     [context deleteObject:[arr objectAtIndex:0]]; 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

我将如何解决这个问题?

+0

为什么每次在索引0处删除对象? – SALMAN 2012-07-21 15:25:28

回答

3

好的。

我在代码中发现了两个问题。

1-为什么要删除索引0处的每个对象?

2-从阵列[arr removeObjectAtIndex:0];比从索引的相同的数组移除对象之后要传递一个目的是核心数据删除它

[context deleteObject:[arr objectAtIndex:0]]; 

这可能是问题。

这一定会帮助你。

使用此:

[context deleteObject:[arr objectAtIndex:indexPath.row]]; 

[arr removeObjectAtIndex:indexPath.row]; 

谢谢:)

+1

非常感谢!你的第二个问题是它!顺序错了,我先把它从数组中取出。我会花几个小时试图找出这个问题。再次感谢! – sridvijay 2012-07-21 16:07:43

0

如果你看一下错误信息,你的代码失败的原因是因为你的一些代码正在寻找的123150308一个不存在的指标。如果没有看到完整的代码,那是不可能的,但是有一个简单的解决方法。

解决异常情况为“预期行为”的代码中出现异常问题的好方法是使用@try块。这是你的tableView@try块地方:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     @try { 
      [arr removeObjectAtIndex:0]; 
      [context deleteObject:[arr objectAtIndex:0]]; 
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     } 
     @catch (NSRangeException *exception) { 
      // Something was out of range; put your code to handle this case here 
     } 
    } 
} 

然而,如果没有您的应用程序的其它部分的情况下,这是不可能告诉,如果这是错误。如果你尝试这样做并且它不起作用,那么错误在你的应用程序中更深

+2

捕捉异常通常是**错误的方式来处理可可中的错误。例外的目的是显示*程序员错误*,这是你应该修复,不抓住。它们可以用于调试错误,但不应该在生产代码中使用这种情况。 – jbrennan 2012-07-21 15:32:57