It's a bit opinion based, but:
I'd use a data controller class. My view controllers would know nothing about the difference between local / remote data. Everything about data access would be controlled by the data controller and the interface it provides would always be asynchronous capable (using callback blocks).
I'd drop NSURLSession
and use RestKit (which doesn't support NSURLSession
yes, support is work-in-progress) because it makes mapping the external data model into your internal data model very easy. If I did need to use NSURLSession
for something, fine, but I'd make that usage explicit only for that activity.
My data controller would own the Core Data stack (though RestKit would create the stack) and mediate access to it. The data controller would also be a singleton. The data controller is the only class that knows about the external data model (though some of the internal data model classes may contain validation logic used during the conversion from external -> internal).