Assertion failure in -[UITableView _endCellAnimati

2020-04-18 08:55发布

问题:

I'm an amateur at best, and stuck on this error! surely something simple...

- (void)addTapped:(id)sender {
TechToolboxDoc *newDoc = [[TechToolboxDoc alloc] initWithTitle:@"New Item" thumbImage:nil fullImage:nil];
[_itemArray addObject:newDoc];
//[self.tableView beginUpdates];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_itemArray.count-1 inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
NSLog(@"%@",indexPath);

[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:YES];

[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
[self performSegueWithIdentifier:@"MySegue" sender:self];

   //[self.tableView endUpdates];

it is breaking on the line the says

 [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:YES];

回答1:

You need to add [UITableView beginUpdates] and [UITableView endUpdates] around:

[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:YES];

From the class reference:

Note the behavior of this method when it is called in an animation block defined by the beginUpdates and endUpdates methods. UITableView defers any insertions of rows or sections until after it has handled the deletions of rows or sections. This happens regardless of ordering of the insertion and deletion method calls. This is unlike inserting or removing an item in a mutable array, where the operation can affect the array index used for the successive insertion or removal operation. For more on this subject, see Batch Insertion, Deletion, and Reloading of Rows and Sections in Table View Programming Guide for iOS.



回答2:

I think you are inserting the row in your tableView but not updating the number of rows at section that's why you are getting error in this line. So along with inserting the row You should also increase the array count or whatever you are using to show the number of rows in table view.



回答3:

In my case, I was using Parse and I deleted a few users (one of which was my iPhone simulator). I got this error whenever refreshing the tableView.

I just deleted the app from the Simulator and made a new account and it works flawlessly.

@droppy's answer helped give me the lightbulb moment of what was wrong!

Hope that helps someone.