【问题标题】:Is it proper to archive/unarchive NSWindowController?归档/取消归档 NSWindowController 是否合适?
【发布时间】:2011-08-08 16:33:12
【问题描述】:

我很难理解出了什么问题。我有一个带有 NSWindow 和 NSTextView 的 NSWindowController。我想将 NSWindowController NSWindow(连同它的所有控件)归档到一个文件中。

然后,我想取消归档相同的 NSWindowController 和 NSWindow 以及文件中的所有视图。但苹果文档说:

Note: Although the NSWindow class inherits the NSCoding protocol from NSResponder, the class does not support coding. Legacy support for archivers exists but its use is deprecated and may not work. Any attempt to archive or unarchive an NSWindow object using a keyed coding object raises an NSInvalidArgumentException exception.

重要的是,如果我 encodeWithObject:windowController,这不会存储 NSWindow。因此,当我为 windowController 进行 decodeWithObject 时,没有加载 NSWindow。

如何归档/取消归档 NSWindowController / NSWindow 及其所有控件?我错过了什么?

【问题讨论】:

  • 这不正常。您归档应用程序的控制器和视图部分的目的是什么?可能有更好的方法来实现您的目标。
  • 基本上我正在实施保存文档的情况。我想保存窗口控制器,因为它包含控制器的内部状态。我正在尝试保存 nswindow,因为它有自己的文本字段、自定义视图等内部状态。我知道我做错了什么,只是似乎无法弄清楚该怎么做/如何去做。跨度>

标签: objective-c xcode4 interface-builder nswindow nswindowcontroller


【解决方案1】:

根据您的回答,这绝对错误的解决方法。存档的控制器/视图对象图唯一有意义的地方是当它存档为 nib/xib 时。文档包含数据,而不是应用程序的一部分。

如果您的目标是 Lion 以下的任何内容,请在保存文档时将您的状态保存在文档数据中的某个位置,并在加载文档时恢复它(请参阅各个加载阶段 Document-Based Applications Overview 了解何时/何地这样做)。

如果您的目标是 Lion 及更高版本,则文档还不是很详细(在某些情况下完全不存在),但 Lion 完全支持这一点,您只需付出很少的努力。请参阅the WWDC 2011 videos,会话 119 - 恢复和自动终止。

【讨论】:

  • 嗯。不是真的在寻找简历部分-也许以后。现在我只是想实现保存部分。这是否意味着我应该(在打开文档时)使用新窗口创建 NSWindowController,然后运行 ​​readFromCoder 将数据加载到窗口控制器中?不确定这是否有意义。
  • Err ...如果您以后不打算恢复设置,保存设置有什么好处?不要被狮子的名字所吸引。重新阅读我的回复。
  • 我一定完全遗漏了一些东西。我只是想将我的项目保存到文件中。项目是单个 NSWindowController 及其变量。然后我想在执行 Open Document 时恢复它(用词不当,它不是 NSDocument)。
  • 您很可能错过了模型-视图-控制器的概念。您的数据就是模型。其余的是您的应用程序的机器。你不保存控制器和视图,只保存数据。
  • 嗯。控制器应该保存数据吗?例如,通过实现 writeToCoder: 它写入它持有的所有数据。
猜你喜欢
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多