Got a problem logically deleting an object from table view. Idea is to set a flag to an item like "deleted" to 1 if item shouldn't be shown. Loading data predicate shouldn't load such rows.
Code with predicate and creation of NSFetchedResultController:
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Photo"];
                request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"section" ascending:YES],
                                            [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]];
                request.predicate = [NSPredicate predicateWithFormat:@"tag = %@ and deleted == %@", self.tag, @(0)];
                self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                                    managedObjectContext:self.tag.managedObjectContext
                                                                                      sectionNameKeyPath:nil
                                                                                               cacheName:nil];
Deletion happens on swipe. Here is action for the swipe:
- (IBAction)deletePhoto:(UISwipeGestureRecognizer *)sender {
    CGPoint location = [sender locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    if (indexPath) {
        Photo *photo = [self.fetchedResultsController objectAtIndexPath:indexPath];
        [self.tag.managedObjectContext performBlock:^{
            photo.deleted = @(1); //This must trigger data change and view must be redrawn. But it's not happending for some reason.
         }];
    }
}
The problem here is that row becomes deleted only after application restart. For some reason FetchedResultsController doesn't remove changed value from data and table view still shows the row.
I tried remove the item from table view explicitly but got exception for incorrect number of item in section 0 (that's why I assume that the row is still in fetch result). Explicit call to [self.tableView reloadData] or [self performFetch] don't reload the data and item still there.
I'm almost ran out of ideas what should I do to reload the data.
Thanks in advance.