If your entire app uses only one managed object context, and you are sure that this will never change in the future, then you could actually use
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_defaultContext];
in all view controllers.
But with the introduction of nested managed object contexts, Apple recommends in the Core Data Release Notes for OS X v10.7 and iOS 5.0:
Nested contexts make it more important than ever that you adopt the “pass the baton” approach of accessing a context (by passing a context from one view controller to the next) rather than retrieving it directly from the application delegate.
In the simplest case, you get a pointer to the default context in the AppDelegate:
defaultContext = [NSManagedObjectContext MR_defaultContext];
and pass this context from the AppDelegate to the first view controller, and from there
to the next view controllers (e.g. in prepareForSegue
when using Storyboards),
and so on.
That makes the transition easier if you decide later to change the structure, e.g. to a multi-context as described here: http://www.cocoanetics.com/2012/07/multi-context-coredata/
Note also that according to this answer https://stackoverflow.com/a/20536335/1187415,
MR_contextForCurrentThread
is deprecated.