3

我们很清楚这是一个与 OSX 和 10.10 相关的问题……而不是 iOS 故事板。

我有一个自定义窗口控制器,它是情节提要的主窗口。该应用程序是基于文档的,因此我不能使用完善的单例方法来访问 MOC(每个文档都有自己的堆栈)。

所以另一个选择是将 MOC 作为变量传递给所有需要它的控制器。在使用情节提要之前,我已经通过为控制器创建自定义初始化程序并自己实例化控制器来完成此操作。这意味着控制器在控制器加载其视图内容时设置了其 MOC 变量,因此视图可以在控制器加载后加载其数据源等。

现在我正在使用情节提要,我不确定如何在实际加载笔尖之前传递 MOC。这不是一个大问题,但是比如说我的一个视图是一个表格视图,当它加载它会尝试加载它的数据时,它当然不能,因为 MOC 仍然为零。我可以在加载它之后设置它,然后让 tableview 重新加载它的数据,但这对于以前优雅的东西来说似乎有点软糖......必须有一种在加载它的视图之前设置控制器的方法正确的?

非常感谢。

4

1 回答 1

0

Apple 的 Lister 示例代码覆盖了窗口控制器上的 setDocument: 并在那里设置了它需要的内容。它不是我所希望的,但它不像我以前做的那样笨重。

所以我最终在我的窗口控制器中得到了这样的东西:

- (void)setDocument:(NSPersistentDocument *)document {
   [super setDocument:document];

   self.managedObjectContext = document.managedObjectContext;

   NSSplitViewController *splitVC = (NSSplitViewController*)self.contentViewController;
   NSSplitViewItem *leftPane = [[splitVC splitViewItems]firstObject];
   NSSplitViewItem *rightPane = [[splitVC splitViewItems]lastObject];

   StaffSidebarViewController *staffSideBarVC = (StaffSidebarViewController*)[leftPane viewController];
   EventsViewController *eventsViewVC = (EventsViewController*)[rightPane viewController];

   staffSideBarVC.managedObjectContext = self.managedObjectContext;
   eventsViewVC.managedObjectContext = self.managedObjectContext;

   [staffSideBarVC.tableView reloadData];
   [eventsViewVC.tableView reloadData];
}

仍然会感谢对此的任何想法。谢谢。

于 2014-06-14T10:28:04.647 回答