我是 objective-c 的新手。我尝试在2个 View Controller (例如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'
知道如何正确调用此方法吗?
最佳答案
In MVC as implemented in iOS/Objective-C , View Controller 引用一个共享模型,而不是彼此引用。他们应该观察该模型的变化,然后相应地更新他们的 UI。
观察变化的几种方法:
- > KVO - 将对模型值的更改连接到观察者中的目标和选择器
- > Notification - 允许模型“发布”它已更改,并允许 View Controller “观察”这些发布。
- > Delegation - 这是最直接的(最被过度使用的,IMO)方法,其中一个对象通过一些定义明确的接口(interface)(协议(protocol))为另一个对象提供完成功能。
关于ios - 不断在两个 View Controller iOS 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848147/