我有一个tableView,其中包含一个值的数组。以下是numberOfRowsInSection
的样子
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
// Return the number of rows in the section.
return [allPasses count];
}
删除行时,此代码会运行
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
[allPasses removeObjectAtIndex:indexPath.row];
// Delete the row from the data source
PassWhizEntity *passToRemove = self.allPasses[indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
// Get the local context
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
[passToRemove MR_deleteInContext:localContext];
[localContext MR_save];
}
这很好用,您可以删除任何行,但是当您删除最后一行时,应用程序崩溃并且您收到此错误。
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
但我不知道如何解决这个问题。我确信这是一个非常简单的修复,但我尝试在数组中添加一个,我不知道还能做什么。任何想法将不胜感激!
答案 0 :(得分:2)
它无法正常工作,因为这些行的顺序错误:
[allPasses removeObjectAtIndex:indexPath.row];
// Delete the row from the data source
PassWhizEntity *passToRemove = self.allPasses[indexPath.row];
目前你所拥有的只是一个隐藏的问题,直到你到达最后一个项目。
反转这些行的顺序,以便在从数组中删除项目之前将其删除。