Hard to say on the limited info provided, but it's hard to reconcile point 5, that your array is reinitialized, but that your db request is still in progress. If the model object that backs the table is reset, the database query shouldn't still be running. Either:
you should have canceled the asynchronous data request once the model object went out of scope (e.g. use operation queue, which if the operations are designed property, are cancelable, instead of GCD); or
you should persist that model object in some cache mechanism, so that as the asynchronous data request is completed, when you come back to the controller in step 4, you already have the data cached and ready for display.
In terms of other potential sources of issues, I wonder if your asynchronous data update process is truly thread-safe. Are you synchronizing your interaction with those properties that you're updating asynchronously? This synchronization is generally done via some locking mechanism or via a dedicated serial queue (or using concurrent queue in reader/writer pattern). Thread-safety is a non-trivial issue and I wonder how confident you are on that score.