Cocoa Touch中多个视图的一个实例

时间:2009-05-12 04:37:47

标签: iphone objective-c cocoa-touch

我想知道如何访问一个类的实例,在多个视图中说“ship class”。

假设我有一个rootViewController和三个子视图,一个Main,一个Battle和一个登陆。我究竟会在哪里实现一个类的实例,该类存储我的船上的所有信息并通过其他视图访问它。如果我的船上有x导弹,另一个视图如何访问该信息以显示它。如果我在主视图上实现它,登陆视图如何获取该信息?

我知道必须有一个简单的方法来做到这一点,我敢打赌,如果没有在任何视图本身实现船级,你应该采用这种方式。我仍然相当新的iPhone编程。

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:3)

创建Ship类的单个实例后,您需要告诉任何其他视图该实例是什么。因此,您可以在创建它的类上使Ship成为公共属性。

@property (nonatomic, retain) Ship* myShip;

假设该类是应用程序委托 - 然后,在另一个文件中,您将编写类似

的内容
[[[UIApplication sharedApplication] delegate].myShip getNumberOfMasts];

这很简单,适用于一个简单的项目,但它确实使Ship对象可用于项目中的任何文件 - 它实际上变成了全局数据,这在大型项目中很难调试。 (如果myShip发生了一些不好的事情,哪个对象负责?如果它可能是你应用中的任何对象,那么调试比如果访问仅限于需要它的两个类是一个更难的问题。)所以,如果你想限制访问权限,然后不要使myShip成为公共属性 - 而是创建myShip的对象在创建其他需要访问的对象时在初始化调用中传递它。像这样的东西

[[myBattleController alloc] initWithShip:myShip];

如果这确实是整个应用程序的唯一一个ship对象,请搜索堆栈溢出以获取有关创建单例对象的建议。

答案 1 :(得分:1)

您的船级是MVC中的模型(模型视图控制器)。这将是一个独立的类。您的3个视图是MVC的视图部分。你所缺少的只是一个控制器。 Controller会创建您的模型(例如船舶类)和您的视图,并保留对所有这些的引用。

Controller是应用程序的“中心”。它从视图接收用户输入并在模型上执行操作,然后告诉视图刷新显示。

有几种方法可以传递数据进行查看。两个可能的选项:添加查看方法以将数据传递给它(例如,在视图上显示一些信息)。第二个选项,可能更适用于此,每个视图都保持对模型的引用 - 这仅用于“只读”访问。例如。当您的视图需要重新显示时,他们会从模型(船级)获得准确的数据。

看看MVC模式,即使在Apple文档中也有很多信息。