Oh boy, it was so incomprehensible that I was really amazed, I found a problem.
The cell that was reloaded contains a UIActivityIndicatorView, which works great. When the cell is reloaded, it implicitly redraws the table cell, and the initiating call takes place inside this process in the table cell. Somehow this startAnimating call interferes with the CATransaction termination block.
When I complete the startAnimating call in the dispatch_async block, the problem disappears:
dispatch_async(dispatch_get_main_queue(), ^{ [self.loadingInd startAnimating]; });
source share