通过包含视图控制器传递数据的好方法是什么

What is a good approach to pass data through containment view controllers

我正在尝试将对象实例从 "initial" 视图控制器传递到 "item1" 和 "item2"。我想避免对 UITabBarController 进行子类化,因为它会使包含视图控制器知道 "too much".

除了子类化 UITabBarController 之外,使用故事板或代码是否有任何好的方法来做到这一点?

I would like to avoid subclassing UITabBarController as it would make containment view controller know "too much".

你应该子类化,你的子类应该为此目的实现一个特定的协议。然而,包含 VC 只知道那个协议,它是合适的,因为它有直接的责任。

I am trying to pass instance of object from "initial" view controller to "item1" and "item2". I would like to avoid subclassing UITabBarController as it would make containment view controller know "too much".

这里的问题是你的 segue 的 destinationViewControllerUITabBarController 而不是 item 1item 2。如果您不想对其进行子类化,这会使您的案例变得非常困难,因为您无法在 initial VC 的实例和两个项目之间直接进行通信。

我的建议确实是子类化,在这种情况下这是正确的方法(您可能想要添加一个指定通信接口的协议)。

其他选项是:

  1. 以某种方式让初始视图控制器访问 item 1item 2 的实例(你必须做很多这个设置在代码中,因为 Storyboards 没有给你在 IB 中完全完成这一切的能力)
  2. 使用 NSNotification 并将实例作为 userInfo 传递(不是很优雅,但对于您的问题可能是最快的解决方案)
  3. 存储要在 NSUserDefaults 中传递的实例的序列化版本,并将它们加载到 item 1item 2(可能会有很多开销)