NSFetchedResultsController has no reason to make guesses about what context or queue it should be generating updates on.
So you've got two choices:
1. Use NSMainQueueConcurrencyType
2. Write all of your NSFetchedResultsControllerDelegate methods to dispatch onto the main queue.
If you hook up an NSFetchedResultsController directly to a UITableViewController, see choice #1.
The question is whether for a tableView or collectionView, we have to use NSMainQueueConcurrencyType ? Since as mentioned here, https://forums.developer.apple.com/message/393419#393419
Using NSMainQueueConcurrencyType blocks UI when we are trying to save big amounts of data into the core data