Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 在NSVIEW控制器之间切换_Xcode_Cocoa_Nsview_Master Detail_Nsviewcontroller - Fatal编程技术网

Xcode 在NSVIEW控制器之间切换

Xcode 在NSVIEW控制器之间切换,xcode,cocoa,nsview,master-detail,nsviewcontroller,Xcode,Cocoa,Nsview,Master Detail,Nsviewcontroller,我正在开发一个Mac应用程序。应用程序在左侧有一个公共源代码视图,在右侧有一个详细视图,它是整个窗口的主要部分 它类似于主细节关系,但源视图中的每个元素都需要另一个细节视图。事实上,我已经为源代码视图中的每个元素设计了一个特定的NSViewController 如果我在这些NSViewController之间切换,这意味着如果我在源代码视图中选择另一个元素,我将删除当前视图并添加新选择的NSViewController的视图。每次更改NSViewController时,其状态都将丢失。当用户返回

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

它类似于主细节关系,但源视图中的每个元素都需要另一个细节视图。事实上,我已经为源代码视图中的每个元素设计了一个特定的NSViewController

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


我现在的问题是:如何保存NSViewController的状态,以便在不丢失其状态的情况下在这些状态之间切换,并在剩下的位置继续?

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

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

关于您的问题,需要考虑两个因素:

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

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


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

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

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


谢谢你的回答!我已经考虑过在视图控制器和源列表元素之间建立一个引用。但这不会导致这种糟糕的性能和内存浪费吗?@burki这取决于应用程序的设计和数据量,因此在不了解应用程序细节的情况下很难判断。谢谢你的回答!我已经考虑过在视图控制器和源列表元素之间建立一个引用。但这不会导致这种糟糕的性能和内存浪费吗?@burki这取决于应用程序的设计和数据量,因此如果不了解应用程序的细节,很难判断。