【问题标题】:Loading NSDocument data from file, but outlets are nil?从文件加载 NSDocument 数据,但出口为零?
【发布时间】:2015-06-28 14:44:31
【问题描述】:

我正在编写一个从文件加载数据的 Cocoa 应用程序。这涉及覆盖 readFromData:ofType:error:。我很好奇人们在调用 readFromData:ofType:error: 时如何处理尚未连接的网点。 Apple 的文档说明了这一点:

...您必须记住,在加载包含在其 nib 文件中的文档的用户界面对象之前,会调用 NSDocument 数据读取方法,例如 readFromData:ofType:error:。当然,在 nib 文件加载之前,您不能向用户界面对象发送消息。

在调用 readFromData:ofType:error: 之后加载 UI 对象有什么好处?我认为这个装载顺序是我的网点为零的原因。由于尚未加载出口,我发现我需要创建额外的变量副本来存储数据,然后这些数据将存储在此方法结束后创建的那些 UI 元素中。

【问题讨论】:

    标签: objective-c cocoa nsdocument


    【解决方案1】:

    模型和视图代码分离。 readFromData:ofType:error: 专门用于尝试读取文档的数据并能够发出操作成功或失败的信号。

    此外,在我看来,NSDocument 子类实际上并没有假设有出口或 UI 代码。可以将 NSDocument 视为管理文档数据的控制器;除了重写 NSDocument 的方法之外,子类不应该做任何事情或做很少的事情。在 NSDocument 子类中,我重写 -[NSDocument makeWindowControllers],并调用 -[NSDocument addWindowController:],传入我创建的窗口控制器子类。 UI 的初始化代码在-[NSWindowController windowDidLoad] 中完成。一如既往,a window is associated with one xib and one window controller subclass。 NSWindowController 还有一个有用的方法可以通过-[NSWindowController document] 访问文档。

    此外,UI可以在调用readFromData:ofType:error: 之前已经加载,就像恢复文档时的情况一样。在这种情况下,如果恢复操作成功,则覆盖 -[NSDocument revertToContentsOfURL:ofType:error:] 并告诉窗口控制器从更新的文档中重新加载其 UI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 2015-08-11
      • 2020-12-20
      • 2018-06-05
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多