The model object (the object that everyone mutates) should be owned by a central "Model" class. You can pass that around. It could have a method such as currentRecord
or the like. That way, all your view controllers can either have a weak reference to the current record, or they could just ask the Model for it each time they need it. View Controllers should never "own" data objects.
This means that the view controllers can use KVO to observe when currentRecord
changes. It alternately gives you an object that can provide notifications when things change. Your Model object can also potentially handle network or disk access (alternately, you can have a separate controller that also utilizes the Model and provides network or disk access). The key here is MVC. You want to separate the model classes from the view and controller classes.