Как мне получить доступ к managedObjectContext из контроллера в глубине пользовательского интерфейса? - PullRequest
4 голосов
/ 13 сентября 2009

Я все еще немного не в себе разбираюсь в iPhone / Какао в целом, так что это, вероятно, простой вопрос.

У меня есть приложение CoreData для iPhone на основе окна. RootController - это UITabBarController. К первому представлению с вкладками прикреплен UINavigationController с таблицей в главном представлении.

Когда приложение запускается, устанавливается objectContext, что имеет смысл сделать так, чтобы приложение делало это один раз. Но теперь у меня есть managedObjectContext в главном контроллере, но я хочу передать его контроллеру представления внутри navcontroller, внутри первого элемента в списке вкладок TabBarController. Как мне это сделать?

Позволит ли мне имя одного из полей в инструменте инспектора пользовательского интерфейса сделать что-то вроде:

tabcontroller.navcontroller.manageObjectContext = self.managedObjectContext;

Это сработало бы только в том случае, если контроллер был создан и «работает». (Разве контроллеры не создаются, пока они не понадобятся?) Что, если это было в представлении, которое было по большей части скрыто?

Во всяком случае, это, вероятно, простая вещь, я просто еще не понимаю вещи должным образом.

Каков общий правильный способ предоставления доступа к параметру manageObjectContext, который создан и настроен в rootController, для многих субконтроллеров в приложении?

Ответы [ 3 ]

6 голосов
/ 13 сентября 2009

Я предполагаю, что это предпочтительный метод, при условии, что инициализация основных данных выполняется в AppDelegate:

[[[UIApplication sharedApplication] delegate] managedObjectContext]

2 голосов
/ 13 сентября 2009

Я обычно даю контроллерам - (id)initWithManagedObjectContext:(NSManagedObjectContext *)context метод init и соответствующую переменную.

Если контроллер по очереди создает другой контроллер, он при необходимости передаст NSManagedObjectContext этому контроллеру таким же образом.


Если вы не хотите создавать дополнительный метод init, просто присвойте контроллерам свойство для NSManagedObjectContext и установите это свойство непосредственно после их создания.

Обычно я стараюсь ограничить количество контроллеров, которые имеют непосредственное отношение к базовым данным и «знают о них».

1 голос
/ 13 сентября 2009

Ответы на на этот вопрос предоставляют несколько способов доступа к основному стеку данных глубоко внутри вашего приложения. Как я отмечаю в одном из комментариев, я предпочитаю использовать одноэлементный DatabaseController, к которому можно получить доступ откуда угодно, подобно тому, как работает standardUserDefaults NSUserDefaults.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...