【问题标题】:Switching between NSViewControllers在 NSViewController 之间切换
【发布时间】:2011-09-07 08:05:10
【问题描述】:

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

这就像主从关系,但源视图中的每个元素都需要另一个详细视图。事实上,我已经为源视图中的每个元素设计了一个特定的 NSViewController。

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

我现在的问题是:如何保存 NSViewController 的状态,这样我就可以在它们之间切换而不会丢失它的状态,并且可以继续我离开的地方?

【问题讨论】:

    标签: xcode cocoa nsview master-detail nsviewcontroller


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答!我已经考虑过在视图控制器和源列表元素之间进行引用。但是会不会造成这种糟糕的性能和内存浪费?
    • @burki 这取决于你的应用程序的设计和数据量,所以如果不知道你的应用程序的细节就很难判断。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-08
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多