If you've set the tables up with a fetched results controller in the standard manner, I'm pretty sure it doesn't matter if the table is on screen or not. It sounds like some unusual updates are being done and/or you're not using the fetched results controller as a datasource properly.
If you're having problems, you can turn off tracking by setting the fetched results controller's delegate to nil
. Try this when the view goes offscreen, and restore (and reload the table) when it comes back.
Note that the exception you're seeing isn't due to missing begin and endUpdates calls. If they were missing, you wouldn't get the exception. They are happening, but inside there you don't have a match between the inserts/deletes and final row count. Before the beginUpdates you have a row in section 1, after you don't, and during you don't delete anything.