So I have a table view, and in the didSelectRowAtIndexPath method, I want to push a view controller based on what row is selected. To determine which view to push, though, I need to perform a Parse (I'm using the parse.com backend for my app) background fetch, and I want to perform the push in the completion handler for this query. The problem, though, is that if I tap the button multiple times, then upon completion multiple views are pushed onto my navigation stack, with the following code: 

```
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// call super because we're a custom subclass.
[super tableView:tableView didSelectRowAtIndexPath:indexPath];
UserDetailsViewController *controller = [[DetailsViewController alloc] initWithNibName:nil
                                                                                    bundle:nil];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

PFQuery *query = [PFQuery queryWithClassName:self.parseClassName];
[query includeKey:@"key1"];
[query whereKey:@"key2" containsString:((UILabel *)(cell.contentView.subviews[1])).text];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){
    Model *model = [[Model alloc] initWithPFObject:[objects objectAtIndex:0]];
    controller.annotation = model;
    [self.navigationController pushViewController:controller animated:YES];
}];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

```

How do I lock onto the completion block to only perform the push once, for let's say the first tapped indexPath, even if a user taps on many rows all one after the other before the push occurs.