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

Pass data between 2 view controllers that are not directly linked

我有一个带有 2 个按钮的主菜单类型的视图控制器(我们称它为 MainVC)- 一个以模态方式呈现另一个常规 VC(来源VC);另一个推 Table VC (DestinationVC)。 SourceVCDestinationVC 没有 直接连接。

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

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

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

编辑 为了清楚起见,我想强调 VC 传递的数据不是直接 connected/transitioning。

VCs之间传递数据的问题,之前问过很多次了;然而,在每个实例中,VC 都是 DIRECTLY 连接的(即 SourceVC Pushes/Modally Presents DestinationVC)。我想知道发送数据 INDIRECTLY 是否不同(在我的例子中,主视图模态呈现源 VC,主视图推送目标 VC)。我知道如何做前者,但是当 VC 分开时我遇到了麻烦。抱歉造成任何混淆。

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

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

计算器。com/a/5210861/3160849

但请注意,在该答案中假设您在 VC 创建时传递数据。在您的情况下,一旦 VC 已创建,您就会通过。因此,仅仅传递数据是不够的,接收方 VC 还需要知道它已发送,以便它可以刷新其视图(我想这就是你要做的)。因此,例如,您可以在父级和目标 VC 之间使用委派(但通常使用 'other way round' )。或者您可以使用 KVO 作为目标来通知父级何时设置数据 object.And 然后刷新。

或者,您可以使用通知。您也可以使用它而不是通过父视图控制器。使用通知有助于将对象彼此解耦(但没有必要解耦始终旨在紧密一起使用的对象)。在您的情况下,请使用您认为最容易执行的方式。 Notification稍微干净一些,但是你必须将数据打包和解包到通知对象中。