将ManagedObjectContext传递/注入视图控制器

los*_*ion 3 core-data nsmanagedobjectcontext ios

我试图通过将我的MOC传递到需要它们的视图控制器来做正确的事情.我正在使用第三方库创建一个侧面/导航菜单,我无法弄清楚如何让我的MOC通过SideController进入我的ViewControllers来完成这项工作.

从这开始(简单部分)第1步:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    LoginViewController *rootView = (LoginViewController *) self.window.rootViewController;
    rootView.managedObjectContext = self.managedObjectContext;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的用户登录后,我将其传递给第三部分控制器(仍然可以在这里)步骤2:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSString *segueIdentifier = [segue identifier];
    if ([segueIdentifier isEqualToString:@"LoginSegue"]) {
        TheRootViewController *rootViewController = [segue destinationViewController];
        rootViewController.managedObjectContext = self.managedObjectContext;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是第三部分代码第3步:

- (void)awakeFromNib
{

...
    MyNavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentViewController"];
    navigationController.managedObjectContext = _managedObjectContext;
    self.contentViewController = navigationController;
...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在步骤2中的segue有机会在RootViewController上设置MOC之前,第3步(awakeFromNib)中的代码被调用.

基本上我可以找到的所有示例都是使用故事板,但由于我的第三方应用程序使用代码,因此我有点混合.如何调用awakeFromNib之前将MOC送到TheRootController?这甚至是可能的.还有另外一种方法吗?

我真的很早就参与了这个项目,并且不想在AppDelegate中开始填充东西,而是想弄清楚如何在第三方应用程序中做正确的事情.

Gra*_*mos 5

如果你想坚持将MOC从控制器传递给控制器​​,你可以简单地将引用MOC的awakeFromNib代码移动到viewDidLoad中.在prepareForSegue函数完成后将调用viewDidLoad.

我还想补充一点,将MOC填入AppDelegate确实是一个坏主意.但正如@spassas建议的那样,使用管理MOC的单例对象可能是个好主意.我经常在我的项目中使用一个.你可以在这个要点中看到一个例子:https://gist.github.com/grantamos/1156fe4d2461dafd9d67