在两个未直接链接的视图控制器之间传递数据

时间:2015-05-26 15:14:35

标签: ios objective-c cocoa-touch

我有一个主菜单类型的视图控制器(让我们称之为MainVC)有2个按钮 - 一个模态呈现另一个常规VC(SourceVC);另一个推送表VC(DestinationVC)。 <{1}}和SourceVC NOT 直接连接。

每当DestinationVC执行SourceVC时,它就会创建一个对象。我希望MethodXSourceVC结束时将该对象发送到DestinationVC,以便将其存储在其表中。我的问题是:

  1. 有没有办法将对象直接从源传递到目标(即代理)?

  2. 如果没有,那么我应该如何传递这些数据呢?

  3. 修改 为了清楚起见,我想强调通过数据的VC没有直接连接/转换。

    以前曾多次询问过在VC之间传递数据的问题;然而,在每种情况下,VC都直接连接(即SourceVC推送/模块呈现DestinationVC)。我想知道发送数据间接是否有所不同,(在我的例子中,主视图模拟呈现SourceVC,主视图推送DestinationVC)。我知道怎么做前者,但是当VC独立时我遇到了麻烦。抱歉有任何困惑。

1 个答案:

答案 0 :(得分:0)

您可以通过父视图控制器或使用通知。

有关向前和向后传递数据的信息,请参阅此过去的问题:

stackoverflow.com/a/5210861/3160849

但请注意,在该答案中,假设您在VC创建时传递数据。在您的情况下,一旦VC已经创建,您就会通过。因此仅仅传递数据还不够,接收VC也需要知道它已被发送,因此它可以刷新它的视图(我认为你要做的是什么)。因此,您可以例如在父VC和目标VC之间使用委托(但是通过其他方式可能是通常的)。或者您可以使用KVO让目标在父级设置数据对象时注意。然后刷新。

或者您也可以使用通知。您也可以使用它而不是通过父视图控制器。使用通知可以很好地将对象彼此分离(但是不需要解耦总是打算一起使用的对象)。在您的情况下,使用您认为最容易的方式。通知稍微清晰一些,但您必须将数据打包并解压缩到通知对象中。