objective-c - 如何使用 Storyboard 将对象从 AppDelegate 传递到 WindowController?

标签 objective-c cocoa nsstoryboard

在我的应用程序委托(delegate)中,我创建了一个 NSManagedObjectContext 属性,我想将其传递给我在 applicationDidFinishLaunching: 中启动的窗口 Controller 。

这基本上是我在 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;
    }
}

这种方法工作得很好,直到我必须以编程方式从应用程序委托(delegate)启动不同的窗口。 现在的问题是,在我能够设置 MyWindowController.managedObjectContext 之前,会调用初始 View 的 prepareForSegue:sender: ,因此它只会传递 nil 并带有以下转场。

在设置 View 层次结构之前,我究竟应该如何将对象从应用程序委托(delegate)传递到初始窗口 Controller ?

我处理这一切的方式是否错误?

最佳答案

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

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

这样,模型仅在需要时被引用,并且不会像传递对象一样使界面困惑。

关于objective-c - 如何使用 Storyboard 将对象从 AppDelegate 传递到 WindowController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452122/

相关文章:

ios - 对 url 字符串进行编码

ios - ARC 在解除分配之前是否将其引用类型实例属性设置为 nil?

objective-c - 从 plist 文件恢复 NSDictionary 中的 BOOL

swift - 如何在 Swift 4 Cocoa 应用程序的开头弹出两个窗口?

xcode - 为什么我无法在 Storyboard中转换到我的 View Controller 子类?

ios - 如何在 iOS 中加载 View 时在 Zoom 上显示用户当前位置?

objective-c - 多种类型的 Swift 数组

ios - iOS 常量文件中的条件 IF/ELSE 语句

javascript - Cocoa - 防止在 WebKit 中缓存 Javascript - Safari Beta 4 错误?

macos - 使用 NSArrayController 时得到 "valueForUndefinedKey: this class is not key value coding-compliant for the key error"