在NSViewControllers之间切换

时间:2011-06-02 19:18:14

标签: xcode cocoa nsview master-detail nsviewcontroller

我正在开发一款Mac应用程序。该应用程序左侧有一个公共源视图,右侧有一个详细视图,它是整个窗口的主要部分。

它类似于Master-Detail关系,但源视图中的每个元素都需要另一个详细视图。实际上,我已经为源视图中的每个元素设计了一个特定的NSViewController。

如果我在这些NSViewControllers之间切换,这意味着如果我在源视图中选择另一个元素,我将删除当前视图并添加新选择的NSViewController的视图。每次我更改NSViewController时,其状态都将丢失。当用户回到那个NSViewController时,他必须重新开始。

我现在的问题是:如何保存NSViewController的状态,以便我可以在不丢失其状态的情况下切换它们,并且可以在我离开的地方继续?

2 个答案:

答案 0 :(得分:0)

使用NSArchiver。在dealloc / init方法中实现归档/取消归档,并将每个视图控制器的状态存储在以类命名的文件中(如果每个视图控制器策略有一个项目)。否则,请考虑一些简单的命名约定并使用它。

答案 1 :(得分:0)

关于您的问题的两个注意事项:

  • 将模型数据保存在模型类中。这意味着您可以始终重新创建视图控制器并设置其表示的对象,前提是模型类保留了通过视图控制器进行的更改。当您需要实例化视图控制器时,将其表示的对象设置为模型类的(表示)。

  • 从超级视图中删除视图时,您不一定需要释放其对应的视图控制器。相反,您可以对窗口控制器/应用程序委托中的所有视图控制器保持强引用,因此实际上不会丢失任何状态。