Assertion failure in -[UITableView _endCellAnimationsWithContext:]

前端 未结 12 1582
走了就别回头了
走了就别回头了 2020-12-08 03:41

Hopefully this will be a quick fix. I have been trying to figure out the error that i keep getting. The error is listed below and the appdelagate is below that.

An

相关标签:
12条回答
  • 2020-12-08 04:03

    I just had this happen to me while using Swift and a FRC backed data store to manage information. Adding a simple check to the delete operation to evaluate the current indexPath.section allowed me to avoid an extraneous call. I think I understand why this problem occurs... Basically I load a message into the top row whenever my dataset is empty. This creates an off by one issue as there is a faux row.

    My Solution

    ... delete my entity, save the datastore and call reloadData on tableView
    //next I add this simple check to avoid calling deleteRows when the system (wrongly) determines that there is no section.
    
           if indexPath.section > 0 {
    
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .None)
    
                }
    
    0 讨论(0)
  • 2020-12-08 04:04

    I don't see the reason for you to show us this part of code. Your error must be connected to this part in your code I assume

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    

    Probably you are making a mistake in one of these data source methods. Currently it's impossible to say what exactly is wrong but I assume it could be something like: You are telling the table view in the numberOfRowsInSection you would like to have n rows reserved and setup and in the cellForRowAtIndexPath you then only handle n - 1 rows for example.

    Sorry that this answer can't be as precise as it should be. If you show us your implementation of your data source it would be much easier to tell what's going on.

    0 讨论(0)
  • 2020-12-08 04:04

    Like Sun Tzu said: it's best to win without fighting. In my case whenever I see this kind of error message (ie discrepancy between rows added deleted etc).. I don't even debug anything.. I simply avoid making that extra call where I reload the rows etc.. that's 99% of the cases where this error happens.

    This is a common scenario where this bug happens: I have a UINavigationController and it has a UITableView, when I click on a row it pushes a new UITableView and so on. This error always happens to me when I pop the last UITableview and go back to the UITableView before it, at this point I make an unnecessary call to the loadIt function which basically inserts the rows and relaods the UITableView.

    The reason this happens is because I erroneously place my loadIt function in viewDidAppear:animated rather than viewDidLoad. viewDidAppear:animated is called every time the UITableView is displayed, viewDidLoad is only called once.

    0 讨论(0)
  • 2020-12-08 04:04

    Its could be one of UITableViewDataSource protocol methods

    For

    - tableView:numberOfRowsInSection:
    

    it should return an integer equal to the sum or result of

    -insertRowsAtIndexPaths:withRowAnimation: and/or -deleteRowsAtIndexPaths:withRowAnimation:

    For

    - numberOfSectionsInTableView:
    

    it should return an integer equal to the sum or result of

    -insertRowsAtIndexPaths:withRowAnimation: and/or -deleteSections:withRowAnimation:

    0 讨论(0)
  • 2020-12-08 04:14

    I Had the same error , which when trying with [tableView reloadData] was working fine . The error was actually in the line

    [TabView insertRowsAtIndexPaths:indexPathsArray withRowAnimation:UITableViewRowAnimationRight];
    

    When i tried to check the indexPath values , they weren't correct as required .

    I fixed it by changing values in indexPathsArray .

    Hope this helps .

    0 讨论(0)
  • 2020-12-08 04:15

    Don't forget to update your array which determines numberOfRowsInSection. It needs to be updated before you animate and remove

    We check if number of rows in section is 1 because we will have to delete the entire section.

    Do correct me if anyone can make this answer clearer.

    [self.tableView beginUpdates];
    if ([tableView numberOfRowsInSection:indexPath.section] == 1) {
    
       [tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];
    } else {
    
       [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
    }
    [self.tableView endUpdates];
    
    0 讨论(0)
提交回复
热议问题