我是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),其中一个对象通过某种定义明确的接口(协议)为另一个对象提供完整的功能。