我应该如何通过多个视图控制器传输数据?

时间:2013-02-08 23:44:42

标签: ios model-view-controller uiviewcontroller delegation

在iOS开发中,在视图控制器之间传递数据似乎过于复杂。以下是我已经意识到的:使用 - (void)prepareForSegue方法可以轻松地将数据向前传递(推送视图)或直接转换到视图。使用presentationViewCotnroller和presendedViewController属性,数据可以在视图控制器之间来回轻松地来回移动。以下是从第二个视图控制器返回到第一个视图控制器的数据示例。这是我正在谈论的示例代码:

    ((FirstViewController *)self.presentingViewController).firstViewControllerProperty = self.secondViewControllerProperty;

然而,在尝试通过多个视图控制器传递数据时,我陷入困境。每个人似乎都说使用委托并考虑MVC。当我试图这样做时,我卡住了。原因如下:如果viewControllerA告诉模型保存一些数据然后viewControllerD需要数据我最终得到了viewControllerD引用模型的一个实例。 (我这样做b / c我不知道如何从视图控制器访问模型)我假设当我创建模型的实例时,这意味着我有一个没有我试图访问的数据的新模型。

然后我意识到也许我应该将我的模型设置为单身人士。我假设单例是在你设置一个由所有其他视图控制器引用的类时,而不必创建模型类的实例。我对单身人士的了解越多,我就越觉得自己越来越偏离轨道。我尝试将所有这些东西放在一起,它变得过于复杂。

我在这里遗漏了什么吗?我是否应该能够从各种视图控制器引用我的模型而不创建它的新实例?我对iOS编程比较陌生,我正在寻找有人指出我正确的方向。我是否应该投入精力学习授权?还是学习单身人士?或了解目标行动?是否有一个简单的教程/书籍建议来了解在视图控制器之间传输数据?

1 个答案:

答案 0 :(得分:0)

如果您想要最简单的方法,只需将属性添加到视图控制器,当您想将数据传递给该视图控制器时,只需将该属性设置为您尝试传递的数据即可。另一种方法是在视图控制器上创建一个接受数据的方法,然后从调用代码中调用该视图控制器上的方法,并使用您要发送的数据。

只要您想要将数据传递给控制器​​,就可以根据需要设置属性或调用方法。

不要与代表混淆,它们只是提供使用方法进行通信的接口的一种方式。我想说在iOS开发中理解代表是至关重要的,因为它们被大量使用。

阅读Objective-C protocols,与其他语言的界面类似。代表就是我们所谓的实现协议的对象。

仅传递从前一个视图控制器知道所需的数据。每次推送视图控制器时都不需要传递数据存储,只需按下正在处理的对象的id或新视图完成其工作所需的任何变量。您的视图控制器应该都能够彼此独立地访问数据存储,不要传递从数据存储中轻松获取的数据。