不断地在两个视图控制器之间传递数据 iOS

Constantly passing data between two view controllers iOS

我是 objective-c 的新人。我尝试在 2 个视图控制器(例如 controllerA 和 controllerB)之间发送数据,但我经常需要这些数据,所以我在 controllerB 中使用 _displaylink 从 controllerA 调用方法。我在 controllerA 中使用播放器,我想在 controllerB 中显示时间等。如何获取 controllerA 的现有实例?

我尝试了两种不同的方法来做到这一点,但都创建了 viewcontroller

的新实例

示例 1:

 RootViewController *controller=(RootViewController *)self.presentedViewController;

示例 2:

RootViewController *parent=self.parentViewController;

当我使用这个解决方案时,我可以从 controllerA 调用方法(但这是来自新实例的方法 :( )

我也试过这个解决方案:

RootViewController *rootController =(RootViewController*)[[(AppDelegate*)
                                                               [[UIApplication sharedApplication]delegate] window] rootViewController];

但是当我尝试调用 中的方法时出现此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MMDrawerController playerPositionS]: unrecognized selector sent to instance 0x7c406c00'

知道如何正确调用此方法吗?

只要你要修改的view controller在navigation stack中,我会尝试类似这样的方法来找到你想要修改其属性的view controller。

 let childVCs = UIApplication.shared.keyWindow!.rootViewController?.childViewControllers
print("childvcs = \(childVCs)")

let myVC = childVCs[0]

let myOtherVC = childVCs[1]

myVC.someProperty = 100

myOtherVC.anotherProperty = 1000

In MVC as implemented in iOS/Objective-C,视图控制器引用 共享模型 ,而不是相互引用。他们应该观察该模型的变化,然后相应地更新他们的用户界面。

观察变化的几种方法:

  • KVO - 将对模型值的更改连接到观察者中的目标和选择器
  • Notification - 允许模型 "post" 它已更改并查看控制器 "observe" 那些帖子。
  • Delegation - 这是最直接的(最被过度使用的,IMO)方法,其中一个对象通过一些定义明确的接口(协议)为另一个对象提供完成功能。