从文件加载NSDocument数据,但出口是零?

时间:2015-06-28 14:44:32

标签: objective-c cocoa nsdocument

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

  

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

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

1 个答案:

答案 0 :(得分:0)

模型和视图代码的分离。 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]访问文档的有用方法。

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