Я сам предпочитаю одноэлементный метод, но Apple рекомендует внедрять зависимости, то есть передавать объект модели данных из контроллера представления в представление контроллера по мере необходимости.
Если вы посмотрите на базовые данные, использующие проект навигации по шаблонам в XCode, вы увидите, как это работает. Контекст managedObject - это модель данных, которая инициализируется и хранится делегатом приложения. Вы можете получить к нему доступ двумя способами:
(1) Поскольку сами экземпляры приложения являются одноэлементными, вы можете запросить у него его делегат, а затем запросить у делегата его свойство managedObjectContest. Итак, в контроллере представления вы бы имели свойство managedObjectContext с пользовательским геттером, определенным как:
(NSManagedObjectContext *) managedObjectContext{
if (managedObjectContext !=nil){
return managedObjectContext;
}
// this is basically applicationObject.delegate.managedObjectContext
self.managedObjectContext=[[[NSApplication sharedApplication] delegate] managedObjectContext];
return managedObjectContext
}
(2) В качестве альтернативы, когда представление открывает другое представление, оно просто присваивает свойству managedObjectContext следующего представления свое собственное. Так что каждое представление открывается с контекстом. Это полезно, если у вас есть несколько объектов данных по какой-то причине.
Если вы просто используете массив или пользовательский класс модели данных, просто замените его имя для управляемого объекта объекта в приведенном выше коде.