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