Swift 将文档数据传递到yosemite中的视图控制器(故事板)

Swift 将文档数据传递到yosemite中的视图控制器(故事板),swift,storyboard,osx-yosemite,nsdocument,Swift,Storyboard,Osx Yosemite,Nsdocument,您应该何时将文档或文档数据传递给ViewController?无法在prepareForSegue中执行此操作,因为作为包含/关系序列一部分的视图控制器未调用此函数 也不在WindowControllerIDloadNib中,因为也不总是调用它。我当前的方法是: 子类NSDocument并重写MakeWindowController以将文档实例传递给窗口控制器 子类NSWindowController并重写windowDidLoad以将文档(或任何其他类型的数据)传递给contentViewCo

您应该何时将文档或文档数据传递给ViewController?无法在prepareForSegue中执行此操作,因为作为包含/关系序列一部分的视图控制器未调用此函数


也不在WindowControllerIDloadNib中,因为也不总是调用它。

我当前的方法是:

  • 子类NSDocument并重写MakeWindowController以将文档实例传递给窗口控制器
  • 子类NSWindowController并重写windowDidLoad以将文档(或任何其他类型的数据)传递给contentViewController
  • 为NSViewController创建子类以处理数据和/或将其传递给ChildViewController

  • 如果另一个NSViewController中的某些内容(如所选内容)发生更改,请使用通知通知NSViewController


  • 这是一个概念性的问题。即使您从一个只有一个viewController的基于文档的新项目开始,这个问题仍然适用。这是一个与视图和文档的生命周期有关的问题。并非每个问题都需要代码。但既然你坚持:你把这条线放在哪里?windowController.contentViewController?.representedObject=self(即文档)我很好奇这是怎么做到的,因为我也碰到了这堵砖墙。似乎有一种方法可以引用对象,但如何引用?似乎setDocument不是NSWindowController的成员,我无法覆盖它。我发现的大多数示例都在Objective-C中,它们都超越了setDocument。此外,NSDocument中似乎没有setFileString。你能在这里分享你的Swift代码吗?谢谢。你不用setDocument。NSWindowController有一个“var文档:AnyObject?”。所以您可以这样做:当我在将文档传递到windowController之前初始化windowController时,调用了windowDidLoad。我错过了什么?override func makeWindowControllers(){//返回包含文档窗口的序列图像板。让序列图像板=NSStoryboard(名称:“Main”,捆绑:nil)让windowController:DocumentWindowController=序列图像板。实例化控制器标识符(“文档窗口控制器”)作为!DocumentWindowController self.addWindowController(windowController)windowController.document=self},代码正确。您可以使用WindowWillDisplay从文档中加载数据,也可以将didSet添加到文档变量。忘了说,我将主窗口控制器的contentViewController的representedObject设置为文档。