Add there some asynchronous calls with automatic data change notifications just to complicate things.
Things which might help:
- Random delay(s) in random places, maybe before table update starts
- @synchronized directive to control multi-thread access
- NSLock to control read/write access
- Remember index of last safe data item count
FIRST update your data, THEN update your table. If you cannot guarantee that, be prepared for endless debugging of just one more crash.