0

在我的应用程序委托中,我创建了一个NSManagedObjectContext我想传递给我在其中启动的窗口控制器的属性applicationDidFinishLaunching:

这基本上是我的代码AppDelegate.m

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSStoryboard *storyboard = [NSStoryboard storyboardWithName:@"Main" bundle:nil];

    self.setupWindowController = [storyboard instantiateControllerWithIdentifier:@"setup"];
    self.setupWindowController.managedObjectContext = self.managedObjectContext;

    [self.setupWindowController showWindow:self];
}

MyWindowController.m我有以下方法:

- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext {
    ((MyViewController *)self.contentViewController).managedObjectContext = managedObjectContext;
}

这是一种方法MyViewController.m

- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender {
    if ([segue.destinationController isKindOfClass:self.class]) {
        ((MyViewController *)segue.destinationController).managedObjectContext = self.managedObjectContext;
    }
}

这种方法效果很好,直到我不得不从应用程序委托以编程方式启动不同的窗口。现在的问题是,prepareForSegue:sender:在我能够设置之前调用初始视图MyWindowController.managedObjectContext,所以它只会通过nil以下segues。

在设置视图层次结构之前,我到底应该如何将对象从我的应用程序委托传递到初始窗口控制器?

我是否以错误的方式接近这一切?

4

1 回答 1

1

我建议通过在应用程序中创建数据模型层来减少控制器之间的依赖关系。

数据模型将管理控制器使用的信息,并在 CoreData 前面提供特定于应用程序的外观。数据模型对象可以是共享实例,也可以从已知对象(例如应用程序委托)请求。

这样,模型只在需要的地方被引用,并且不会像传递对象那样混乱接口。

于 2015-10-31T13:45:37.617 回答