我是Objective-C的新手。我尝试在2个视图控制器(例如controllerA和controllerB)之间发送数据,但是我一直需要此数据,因此我在controllerB中使用_displaylink从controllerA调用方法。我在controllerA中使用播放器,并且想在controllerB中显示时间等。如何获取controllerA的现有实例?

我尝试2种不同的方法来做到这一点,但是都创建了viewcontroller的新实例。

范例1:

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


范例2:

RootViewController *parent=self.parentViewController;


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

我也尝试以下解决方案:

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


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


  ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[MMDrawerController
  [playerPositionS]:无法识别的选择器已发送到实例0x7c406c00'


任何想法如何正确调用此方法?

最佳答案

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

观察变化的几种方法:


KVO-将模型值的更改连接到观察器中的目标和选择器
Notification-允许模型“发布”已更改的内容,并允许视图控制器“观察”这些发布。
Delegation-这是最直接的方法(使用最多的IMO),其中一个对象通过某种定义明确的接口(协议)为另一个对象提供完整的功能。

10-08 06:28