如何修复由于未捕获的异常"NSRangeException"而导致的表视图崩溃,原因:'*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds



我正试图按照一本书的示例代码创建一个表视图。但它总是崩溃。调试器显示信息:

2012-08-03 02:51:09.854 TableView[652:c07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(0x1794022 0x1194cd6 0x1780d88 0xfdd1b7 0x3b24 0x2e62 0xb2c54 0xb33ce 0x9ecbd 0xad6f1 0x56d21 0x1795e42 0x2065679 0x206f579 0x1ff44f7 0x1ff63f6 0x2083160 0x16e84 0x17767 0x26183 0x26c38 0x1a634 0x167eef5 0x1768195 0x16ccff2 0x16cb8da 0x16cad84 0x16cac9b 0x16c65 0x18626 0x1eb2 0x1e25)
terminate called throwing an exception(lldb) 

我不知道这是什么意思。抱歉代码太长了。。。。如果需要,我可以发送整个代码。

网上有人说出现问题是因为plist,http://p2p.wrox.com/271591-post2.html但是我不能修改Xcode 4.4.中的plist。Xcode在这个代码上显示了一个绿色指针

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = [[object valueForKey:@"timeStamp"] description];
}

您的表视图数据源方法(numberOfSectionsInTableView:tableView:numberOfRowsInSection:tableView:cellForRowAtIndexPath:)使用self.years作为数据源。

另一方面,当一个新的"事件"实体被添加到核心数据存储或从核心数据存储中删除时,您有一个提取的结果控制器,它调用insertRowsAtIndexPaths:...deleteRowsAtIndexPaths:...

所以你把两种不适合的东西混合在一起。崩溃是因为添加了表视图行,但数据源没有相应地更改。

这意味着您正试图访问一个具有0个元素的数组的第一个元素。我猜错误出现在您调用objectAtIndex的其中一行。

请记住,数组索引从0开始!!!

相关内容

最新更新