title: 'NSInternalInconsistencyException', reason: 'attempt to insert row 3 into section 0, but there are only 2 rows in section 0 after the update'
body: <p>I use Core Data in my project and when trying to add new row, I get an error:</p>
  
  <p><strong>Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-3318.16.14/UITableView.m:1377
  2015-01-16 22:45:47.172 LinguaCard[26439:599761] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert row 3 into section 0, but there are only 2 rows in section 0 after the update'</strong></p>
  
  <p>CardsTableViewController.m</p>
  
  <pre><code>#import "CardsTableViewController.h"
  #import "Lesson.h"
  #import "Card.h"
  #import "CoreDataHelper.h"
  
  @interface CardsTableViewController ()
  
  @property (strong, nonatomic) NSMutableArray *cards;
  
  @end
  
  @implementation CardsTableViewController
  
  -(NSMutableArray *)cards{
      if (!_cards)
          _cards = [[NSMutableArray alloc] init];
      return _cards;
  
  }
  
  - (void)viewDidLoad {
      [super viewDidLoad];
  
      NSSet *unordereCards = self.lesson.cards;
      NSSortDescriptor *nameDescr = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
      NSArray *sortedCards = [unordereCards sortedArrayUsingDescriptors:@[nameDescr]];
      self.cards = [sortedCards mutableCopy];
  
  
  
  #pragma mark - helpers
  -(Card *)cardWithName:(NSString *)name{
  
      NSManagedObjectContext *context = [CoreDataHelper managedObjectContext];
  
      Card *card = [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:[CoreDataHelper managedObjectContext]];
      card.name = name;
      card.lesson = self.lesson;
  
  
      NSError *error = nil;
      if (![context save:&amp;error]){
          //we have an error
          NSLog(@"error: %@", error);
      }
      return card;
  }
  
  
  #pragma mark - UIAlertViewDelegate
  
  -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
  
  
      if (buttonIndex == 1) {
  
          NSString *alertText = [alertView textFieldAtIndex:0].text;
          [self.cards addObject:[self cardWithName:alertText]];
          [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:[self.cards count]-1 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
  
  
  
      }
  
  }
  
  
  -(void)viewWillAppear:(BOOL)animated{
  
      [super viewWillAppear:animated];
      NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Card"];
  
      NSError *error = nil;
      NSArray *fetchedCards = [[CoreDataHelper managedObjectContext] executeFetchRequest:fetchRequest error:&amp;error];
  
      self.cards = [fetchedCards mutableCopy];
  
      [self.tableView reloadData];
  }
  
  
  - (IBAction)addCard:(id)sender {
  
      UIAlertView *newCard = [[UIAlertView alloc] initWithTitle:@"Enter new card name:" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add", nil];
  
      [newCard setAlertViewStyle:UIAlertViewStylePlainTextInput];
      [newCard show];
  }
  
  
  #pragma mark - Table view data source
  
  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
      // Return the number of sections.
      return 1;
  }
  
  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  
      return self.lesson.cards.count;
  }
  
  
  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Card Cell" forIndexPath:indexPath];
  
      Card *selectedCard = self.cards[indexPath.row];
      cell.textLabel.text = selectedCard.name;
      return cell;
  }
  </code></pre>