在未直接链接的 2 个视图控制器之间传递数据
Pass data between 2 view controllers that are not directly linked
我有一个带有 2 个按钮的主菜单类型的视图控制器(我们称它为 MainVC
)- 一个以模态方式呈现另一个常规 VC(来源VC);另一个推 Table VC (DestinationVC
)。 SourceVC
和 DestinationVC
没有 直接连接。
每当 SourceVC
执行 MethodX
时,它都会创建一个对象。我希望 SourceVC
在 MethodX
结束时将该对象发送到 DestinationVC
,以便它可以存储在其 table 中。我的问题是:
有没有办法将对象直接从源传递到目标(即委托)?
如果没有,那么我应该如何传递这些数据?
编辑
为了清楚起见,我想强调 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稍微干净一些,但是你必须将数据打包和解包到通知对象中。
我有一个带有 2 个按钮的主菜单类型的视图控制器(我们称它为 MainVC
)- 一个以模态方式呈现另一个常规 VC(来源VC);另一个推 Table VC (DestinationVC
)。 SourceVC
和 DestinationVC
没有 直接连接。
每当 SourceVC
执行 MethodX
时,它都会创建一个对象。我希望 SourceVC
在 MethodX
结束时将该对象发送到 DestinationVC
,以便它可以存储在其 table 中。我的问题是:
有没有办法将对象直接从源传递到目标(即委托)?
如果没有,那么我应该如何传递这些数据?
编辑 为了清楚起见,我想强调 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稍微干净一些,但是你必须将数据打包和解包到通知对象中。