2013-02-08 41 views
1

iOS开发中在视图控制器之间传递数据看起来过于复杂。这是我意识到的事情:通过 - (void)prepareForSegue方法可以轻松地将数据传递(推送视图)或直接传递给视图。使用presentationViewCotnroller和presendedViewController属性,数据可以轻松地在视图控制器之间来回切换。以下是从第二个视图控制器返回到第一个视图控制器的数据示例。以下是我在谈论的一个示例代码:我应该如何通过多个视图控制器传输数据?

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

不过,我试图通过多个视图控制器传递数据时很卡。每个人似乎都会使用授权,并根据MVC进行思考。当我试图做到这一点时,我卡住了。这是为什么:如果viewControllerA告诉模型保存一些数据,然后viewControllerD需要数据我最终有viewControllerD引用模型的一个实例。 (我这样做B/C我不知道如何从视图控制器访问模型)我假设当我创建模型的一个实例,这意味着我有一个新的模型没有我试图访问的数据。

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

我在这里错过了什么吗?我应该能够从各种视图控制器引用我的模型而不创建新的实例吗?我对iOS编程相对来说比较陌生,我正在寻找有人指点我的方向。我应该把自己的精力放在学习授权上吗?或学习单身人士?或学习目标行动?有没有一个简单的教程/书籍建议来了解在视图控制器之间传输数据?

+0

这已经在这里详细回答了:http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers – marrock 2014-08-09 01:32:07

回答

0

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

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

不要太委屈代表,只是为使用方法提供通信接口。我想说,了解iOS开发中的代表是非常重要的,因为它们的使用非常严重。

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

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

+0

当我建立一个黑色插孔卡计数应用程序,我会有一个“ mainView“,”settingsView“和”cardView“。当我在我的settingsView中选择选项时,我会设置我的套牌数量,最小和最大赌注属性等等。“settingsView”将创建这些属性,然后我的其他视图将具有可以存储这些变量的属性(因此不会丢失数据)。你是否建议我的settingView会调用一个“mainView”方法。该方法将在我的主视图中设置我需要的数据。但是这些数据不会被清除到我的卡片视图中吗? – iOSAppGuy 2013-02-09 00:29:49

+0

我认为你的问题现在变得更有意义。我认为你错过的是一个模型,如果你正在考虑使用MVC。观点之间有太多的喋喋不休,我认为这是你的抱怨。你可能会考虑设置一个持久的数据存储(比如NSUserDefaults,Core Data等)来保存。然后通过调用一个方法简单地告诉必要的视图“设置已经改变”,并且他们会从数据存储本身提取数据。这些视图不必如此依赖于他们可以轻易获得的数据。 – Kekoa 2013-02-09 00:37:09

+0

这正是我觉得我需要的。我已经研究过Core Data,并意识到这一点在我的脑海中有点过分了。我觉得Core Data是存储我的设置过于复杂的方式,但它会起作用。当我开始深入核心数据时,我意识到我已经有点头痛了。然后我开始考察代表团,单身人士等等。我很喜欢 - 真的吗?所有这一切,因为我想我的黑色杰克应用程序记住最低赌注总是$ 5?似乎很多。知道这一点,你会建议我首先学习什么路线?也许从NSUserDefaults开始吧?这足够简单,足以包裹我的头? – iOSAppGuy 2013-02-09 01:09:03