If you have simply inserted objects in another moc, then they aren't stale in this moc, since they've never been registered. Your loop should be using objectRegisteredForID: and only refreshing those (so as to not pull in objects that no one wasn't already paying attention to.
So what I'm doing is populate the main moc that is also used in the NSArrayController. But the NSArrayController doesn't show the new inserted values in the UI unless I ask for a fetch: - (void)updateManagedObjectContext:(NSNotification *)aNotification; { [myArrayController fetch:self]; } As far as I know, this is the only way to get your controller to react to insertions/deletions in another moc.
So what I'm doing is populate the main moc that is also used in the NSArrayController. But the NSArrayController doesn't show the new inserted values in the UI unless I ask for a fetch: - (void)updateManagedObjectContext:(NSNotification *)aNotification; { [myArrayController fetch:self]; }