1

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

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

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

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

我在这里错过了什么吗?我应该能够在不创建新实例的情况下从各种视图控制器中引用我的模型吗?我对 iOS 编程相对较新,我正在寻找能指出我正确方向的人。我应该把精力放在学习授权上吗?或学习单身人士?或学习目标行动?是否有简单的教程/书籍推荐来学习在视图控制器之间传输数据?

4

1 回答 1

0

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

只要您有对要将数据传递到的控制器的引用,您就可以根据需要设置属性或调用方法。

不要对委托感到太困惑,它们只是一种使用方法提供通信接口的方式。我想说理解 iOS 开发中的委托是很重要的,因为它们被大量使用。

阅读Objective-C 协议,这些协议类似于其他语言的接口。委托就是我们所说的实现协议的对象。

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

于 2013-02-08T23:50:42.830 回答