Xcode 在NSVIEW控制器之间切换
我正在开发一个Mac应用程序。应用程序在左侧有一个公共源代码视图,在右侧有一个详细视图,它是整个窗口的主要部分 它类似于主细节关系,但源视图中的每个元素都需要另一个细节视图。事实上,我已经为源代码视图中的每个元素设计了一个特定的NSViewController 如果我在这些NSViewController之间切换,这意味着如果我在源代码视图中选择另一个元素,我将删除当前视图并添加新选择的NSViewController的视图。每次更改NSViewController时,其状态都将丢失。当用户返回到NSViewController时,他必须重新开始Xcode 在NSVIEW控制器之间切换,xcode,cocoa,nsview,master-detail,nsviewcontroller,Xcode,Cocoa,Nsview,Master Detail,Nsviewcontroller,我正在开发一个Mac应用程序。应用程序在左侧有一个公共源代码视图,在右侧有一个详细视图,它是整个窗口的主要部分 它类似于主细节关系,但源视图中的每个元素都需要另一个细节视图。事实上,我已经为源代码视图中的每个元素设计了一个特定的NSViewController 如果我在这些NSViewController之间切换,这意味着如果我在源代码视图中选择另一个元素,我将删除当前视图并添加新选择的NSViewController的视图。每次更改NSViewController时,其状态都将丢失。当用户返回
我现在的问题是:如何保存NSViewController的状态,以便在不丢失其状态的情况下在这些状态之间切换,并在剩下的位置继续?使用
NSArchiver
。在dealoc/init方法中实现归档/取消归档,并将每个视图控制器的状态存储在以类命名的文件中(如果每个视图控制器策略有一个项)。否则,考虑一些简单的命名约定并使用它。使用NSArchiver
。在dealoc/init方法中实现归档/取消归档,并将每个视图控制器的状态存储在以类命名的文件中(如果每个视图控制器策略有一个项)。否则,考虑一些简单的命名约定并使用它。关于您的问题,需要考虑两个因素:
- 将模型数据保存在模型类中。这意味着您可以始终重新创建视图控制器并设置其表示的对象,前提是模型类保留了通过视图控制器所做的更改。当需要实例化视图控制器时,请将其表示的对象设置为(模型类的表示)
- 从其superview中删除视图时,不必释放其相应的视图控制器。相反,您可以在窗口控制器/应用程序委托中保留对所有视图控制器的强引用,因此实际上不会丢失任何状态
- 将模型数据保存在模型类中。这意味着您可以始终重新创建视图控制器并设置其表示的对象,前提是模型类保留了通过视图控制器所做的更改。当需要实例化视图控制器时,请将其表示的对象设置为(模型类的表示)
- 从其superview中删除视图时,不必释放其相应的视图控制器。相反,您可以在窗口控制器/应用程序委托中保留对所有视图控制器的强引用,因此实际上不会丢失任何状态