不断在两个视图控制器之间传递数据iOS
我是新的objective-c。我尝试在2个视图控制器(例如controllerA和controllerB)之间发送数据,但我不断需要这些数据,因此我使用controllerB中的_displaylink从controllerA调用方法。我在控制器A中使用播放器,我想在控制器B中显示时间等。如何获得controllerA的现有实例?不断在两个视图控制器之间传递数据iOS
我尝试两种不同的方式来做到这一点,但两者创建视图 - 控制
例1的新实例:
RootViewController *controller=(RootViewController *)self.presentedViewController;
例子2:
RootViewController *parent=self.parentViewController;
当我用这个解决方案我可以调用控制器A的方法(但是这是从新实例:()的方法:()
我也尝试此解决方案:
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,视图控制器指共享模型,而不是彼此连接。他们应该观察该模型中的更改,然后相应地更新其UI。
一些方法来观察变化:
- KVO - 连接更改观察者
- Notification值传递给目标和选择模式 - 允许模型“后”,它的改变和视图控制器去“观察”那些帖子。
- Delegation - 这是最直接的(大多数过度使用,IMO)方法,其中一个对象提供了一些完善的界面(协议)的功能。
中调用的模态我使用委托和通知,因为我需要以两种方式传递数据。谢谢你的帮助! – MaSza
只要你想修改的视图控制器在导航堆栈中,我会尝试这样的事情来找到你想修改其属性的视图控制器。
let childVCs = UIApplication.shared.keyWindow!.rootViewController?.childViewControllers
print("childvcs = \(childVCs)")
let myVC = childVCs[0]
let myOtherVC = childVCs[1]
myVC.someProperty = 100
myOtherVC.anotherProperty = 1000
两者都不创建viewcontroller的新实例。 ControllerB是ControllerA的childViewController吗?发布一些代码以查看控制器A + B之间的hirachie。 – shallowThought
使用协议/委托 – Rajat
ControllerB是在ControllerA – MaSza