我试图通过将我的MOC传递给需要它们的视图控制器来做正确的事情。我正在使用第三方lib创建一个Side / Navigation菜单,但是我很难弄清楚如何将我的MOC从SideController传递到执行该工作的ViewController中。

从这个(容易的部分)开始,第一步:

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

然后,在我的用户登录后,将其传递给第三方控制器(此处仍然可以)步骤2:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSString *segueIdentifier = [segue identifier];
    if ([segueIdentifier isEqualToString:@"LoginSegue"]) {
        TheRootViewController *rootViewController = [segue destinationViewController];
        rootViewController.managedObjectContext = self.managedObjectContext;
    }
}

这是第三部分代码的步骤3:
- (void)awakeFromNib
{

...
    MyNavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentViewController"];
    navigationController.managedObjectContext = _managedObjectContext;
    self.contentViewController = navigationController;
...
}

我的问题是,在步骤2中我的选择有机会在RootViewController上设置MOC之前,要调用步骤3中的代码(awakeFromNib)。

基本上,我可以找到的所有示例都一直使用情节提要,但是由于我的第三方应用程序使用代码,因此有些混合。如何在调用awakeFromNib之前将MOC转到TheRootController?那有可能吗?还有另一种方法吗?

我真的很早就开始从事该项目,并且不想开始在AppDelegate中填充东西,而是努力弄清楚如何在第三方应用程序中做正确的事。

最佳答案

如果您想坚持将MOC从一个控制器传递到另一个控制器,则只需将引用MOC的awakeFromNib代码移动到viewDidLoad中。 prepareForSegue函数完成后,将调用viewDidLoad。

我还要补充一点,将MOC放入AppDelegate中确实是一个坏主意。但是,正如@spassas所建议的那样,最好使用一个单例对象来为您管理MOC。我经常在我的项目中使用一个。您可以在此要点中看到一个示例:https://gist.github.com/grantamos/1156fe4d2461dafd9d67

10-07 19:41
查看更多