My bad, I see you did start doing that. I think the table bounds check can be factored in here as well. Something like:

```objc
  ViCompletion *completion = [self currentCompletion];
  if (completion)
    completion.isCurrentChoice = <appropriate for the function call>;

  return YES;

// …

- (ViCompletion *)currentCompletion
{
  NSInteger selection = [tableView selectedRow];
  if (selection < 0 || selection >= _filteredCompletions.count) {
    return nil;
  }

  return [self completionForRow:oldSelection];
}
```

That's assuming `completionForRow:` is also being used elsewhere; otherwise I think it's fine to roll it into `markAndReturnCurrentCompletion`.