【问题标题】:How should I be transferring data through multiple view controllers?我应该如何通过多个视图控制器传输数据?
【发布时间】:2013-01-24 20:18:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: ios model-view-controller uiviewcontroller delegation


【解决方案1】:

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

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

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

阅读Objective-C protocols,它类似于其他语言的界面。委托就是我们所说的实现协议的对象。

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

【讨论】:

  • 当我构建一个黑杰克算牌应用程序时,我会拥有一个“mainView”、一个“settingsView”和一个“cardView”。当我在我的 settingsView 中选择选项时,我会设置我的甲板数量属性、最小和最大赌注属性等等。 “settingsView”将创建这些属性,然后我的其他视图将具有存储这些变量的属性(因此不会丢失任何数据)。您是否建议我的 settingView 调用“mainView”方法。该方法将在我的主视图上设置我需要的数据。但是这些数据不会在我的卡片视图中被清除吗?
  • 我认为你的问题现在更有意义了。如果您从 MVC 的角度考虑,我认为您缺少的是模型。意见之间有太多的喋喋不休,我认为这是你的抱怨。您可能会考虑拥有一个可以保存设置的持久数据存储(例如 NSUserDefaults、Core Data 等)。然后只需通过调用一个方法告诉必要的视图“设置已更改”,它们就会自己从您的数据存储中提取数据。这些视图不必如此依赖彼此的数据,他们可以轻松获取自己的数据。
  • 这正是我觉得我需要的。我研究了 Core Data 并意识到此时这有点超出我的想象。我觉得 Core Data 是一种过于复杂的存储设置的方式,但它会起作用。当我开始深入研究 Core Data 时,我意识到这有点过头了。然后我开始研究委派、单身人士等。我喜欢 - 真的吗?这一切都是因为我希望我的二十一点应用程序记住最低赌注总是 5 美元?好像很多。知道了这一点,你建议我先学什么路线?也许从 NSUserDefaults 开始?这么简单就可以绕到我头上吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2012-09-01
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多