Question: I have a `UITabbar` with multiple controllers in it. One of the controllers is used to add Events to Core Data, while another controller is used to display events as in a UITableView using `NSFetchedResultsController`.

Here's the behaviour that I would like to achieve:
Upon disappearing, the UITableView stops updating, and when the user comes back, the entire table view is reloaded. Otherwise, inserting events from the other controller takes longer, as new rows are created in the `UITableView`, even thought it is not visible.

I'm wondering how I can achieve this behavior, as it doesn't seem to work as I expect it would be:

I have set the delegate of the NSFetchedResultsController to nil in `viewWillDisappear`, and restore it in `viewWillAppear`, along with a call to `[UITableView reloadData]`; 

Somehow, I do not see the new data, and suspect this is due to the way NSFetchedResultsController stops fetching if it does not have a delegate.

How can I properly "suspend" updates to `UITableView` when it disappears, but still able to see the entire dataset when the controller reappears?

Answer: 
I think you do not have to "suspend" the table view updates. A `UITableView` will anyway only request data from the `NSFetchedResultsController` for *visible* cells. If the the table view is not visible, no updates will be fired. 

Did you test if inserting events from another controller really takes longer? I doubt it. What does Instruments say?

If your delegate methods are fired, you could still check if the table view is visible before doing any updates. 

After that, you do exactly as suggested by rob: do a `performFetch:` in `viewWillAppear:`.
Instead of setting the `delegate` of the `NSFetchedResultsController` to nil in `viewWillDisappear`, try setting an object of `NSFetchedResultsController` to nil