Передача контекста управляемого объекта с помощью контроллера вкладок - PullRequest
3 голосов
/ 13 февраля 2011

Хорошо, я пытался понять это снова и снова.

Я знаю, что лучше всего, чтобы делегат приложения передавал контекст управляемого объекта первому контроллеру представления в приложении, а затем каждый последующий контроллер представления передавал контекст управляемого объекта вниз. Однако, когда я использую контроллер панели вкладок в своем приложении, я могу обернуть голову вокруг этого дополнительного слоя.

Единственный способ, которым я смог выяснить, как это сделать - это заставить корневой контроллер каждой вкладки «Reach Back» в делегате приложения захватить контекст, но, насколько я понимаю, это плохая форма.

Ответы [ 4 ]

2 голосов
/ 24 февраля 2011

Вы можете использовать конструктор интерфейса для достижения того же.

Вот немного измененная (для некоторой дополнительной ясности) версия первоначального предложения Рога - обратите внимание на

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    ViewController1 *vc1;
    ViewController2 *vc2;
    ViewController3 *vc3;
}

@property (nonatomic, retain) IBOutlet ViewController1 *vc1;
@property (nonatomic, retain) IBOutlet ViewController2 *vc2;
@property (nonatomic, retain) IBOutlet ViewController3 *vc2;

IBOutlet, затем в файле реализации:Затем изнутри Интерфейсного Разработчика перетащите Ctrl из вашего Делегата приложения на контроллер представления, вложенный в контроллер панели вкладок, и подключите соответствующий контроллер представления из появившегося контекстного меню.

1 голос
/ 01 января 2013

Вы также можете просто сделать что-то подобное в вашем AppDelegate:

CoreDataUsingViewController *vc = (CoreDataUsingViewController *)[[tabBarController viewControllers] objectAtIndex:1];
vc.managedObjectContext = self.managedObjectContext;

Я добавил coreData в существующий проект с несколькими различными целями сборки и не хотел воссоздавать все различные UITabBarControllers с нуля. Это было довольно легко сделать, хотя я не уверен, что это самый хитрый способ сделать это или нет.

Смотрите также

Как поделиться ManagedObjectContext при использовании UITabBarController

1 голос
/ 14 февраля 2011

В конце концов, ключом было не полагаться на интерфейсный конструктор при создании контроллера панели вкладок. Делая это вручную в коде, я могу легко передать контекст управляемого объекта контроллеру представления, поскольку я создаю их в applicationatoinDidFinishLaunchingWithOptions:

Я использовал эту статью в качестве основы: http://www.iphonelife.co.uk/creating-a-uitabbarcontroller-programmatically/

0 голосов
/ 13 февраля 2011

Не уверен, правильно ли я понимаю вашу проблему, но почему бы просто не передать MOC таким же образом другим контроллерам представления? Вот пример:

@interface AppDelegate : NSObject <UIApplicationDelegate> {
    ViewController1 *vc1;
    ViewController2 *vc2;
    ViewController3 *vc3;
}

// Declare properties as per normal

Затем в файле реализации:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
       vc1.managedObjectContext = self.managedObjectContext;
       vc2.managedObjectContext = self.managedObjectContext;
       vc3.managedObjectContext = self.managedObjectContext;
       // Continue with your implementation logic
}

Надеюсь, это поможет! Рог

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