gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:49:00 24 4
gpt4 key购买 nike

在我的应用程序委托(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com