You could use an NSNotification.
Say View Controller A fetches the results, and View Controller B needs them.
in VCA:
NSArray *data = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"newFetchedDataNotification"
object:nil
userInfo:@{@"data": data}];
in VCB:
in viewWillAppear, start listening for the notification:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(processData)
name:@"newFetchedDataNotification"
object:nil];
and add a method:
- (void)processData:(NSNotification *)notification
{
NSArray *data = [notification.userInfo objectForKey:@"succeeded"]
}
And don't forget to unregister for notifications in viewWillDisappear:
[[NSNotificationCenter defaultCenter] removeObserver:self];
I still think the preferred way is using an NSFetchedResultsController to do a first fetch and be notified when objects change. Take a look at this tutorial:
http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller
PS: NSManagedObjects are just like any other objects, no need to use encoding. You need to be careful when modifying and saving them though!