Ваша непосредственная проблема не имеет ничего общего с базовыми данными. Вы назначаете один и тот же контроллер навигации для каждой вкладки, когда вам нужен отдельный контроллер навигации для каждой вкладки, в противном случае иерархия представлений контроллера навигации будет перемешиваться при каждом изменении вкладок.
Шаблон, рекомендуемый в вопросе, на который вы ссылаетесь, называется «внедрение зависимостей», и в большинстве случаев Apple рекомендует его. Однако, в случае панелей вкладок или любой другой сложной иерархии представления / контроллера представления, внедрение зависимости может усложниться. Это особая проблема с панелями вкладок, потому что вы обычно не загружаете все представления / контроллеры вкладок при запуске приложения, а ждете, пока каждая вкладка не будет выбрана, прежде чем загружать ее элементы.
Вместо этого вы можете использовать альтернативный шаблон, который использует одноэлементное состояние объектов UIApplication. Поскольку существует только один объект приложения, существует только один объект делегата приложения. Это означает, что в любом месте приложения вы можете позвонить так:
(MyApplicationDelegate *) appDelegate=(MyApplicationDelegate *)[[UIApplication sharedApplication] delegate];
... и всегда получаю один и тот же объект приложения. Затем, если у вас есть контекст управляемого объекта, определенный как свойство делегата приложения, вы можете получить контекст просто:
theManagedObjectContext=appDelegate.managedObjectContext
Добавьте эти две строки в каждый контроллер представления, и вы всегда можете быть уверены в том, что получите контекст управляемого объекта делегата приложения.