Sounds like the old model/view confusion. reloadData will merely re-display the data that is already in the data source, not load in new data. You can call
[yourFetchedResultsController performFetch:&*error];
everytime new data is available, to force an immediate update. As you saw, the NSFetchedResultsController will update its results, but when and how often is dependant on whether it has a delegate and whether the cache file name is set. I quote from NSFetchedResultsController Class Reference:
In addition,
NSFetchedResultsController provides
the following features:
It optionally monitors changes to
objects in its associated managed
object context, and reports changes in
the results set to its delegate (see
“The Controller’s Delegate”). It
optionally caches the results of its
computation so that if the same data
is subsequently re-displayed, the work
does not have to be repeated (see “The
Cache”).
A controller thus effectively has three modes of operation, determined by whether it has a delegate and whether the cache file name is set.
No tracking: the delegate is set to
nil. The controller simply provides
access to the data as it was when the
fetch was executed.
Memory-only tracking: the delegate is
non-nil and the file cache name is set
to nil. The controller monitors
objects in its result set and updates
section and ordering information in
response to relevant changes.
Full persistent tracking: the delegate
and the file cache name are non-nil.
The controller monitors objects in its
result set and updates section and
ordering information in response to
relevant changes. The controller
maintains a persistent cache of the
results of its computation.