2016-11-28 83 views
0

我是新的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'

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

+1

两者都不创建viewcontroller的新实例。 ControllerB是ControllerA的childViewController吗?发布一些代码以查看控制器A + B之间的hirachie。 – shallowThought

+0

使用协议/委托 – Rajat

+0

ControllerB是在ControllerA – MaSza

回答

1

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

一些方法来观察变化:

  • KVO - 连接更改观察者
  • Notification值传递给目标和选择模式 - 允许模型“后”,它的改变和视图控制器去“观察”那些帖子。
  • Delegation - 这是最直接的(大多数过度使用,IMO)方法,其中一个对象提供了一些完善的界面(协议)的功能。
+0

中调用的模态我使用委托和通知,因为我需要以两种方式传递数据。谢谢你的帮助! – MaSza

0

只要你想修改的视图控制器在导航堆栈中,我会尝试这样的事情来找到你想修改其属性的视图控制器。

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

let myVC = childVCs[0] 

let myOtherVC = childVCs[1] 

myVC.someProperty = 100 

myOtherVC.anotherProperty = 1000 
相关问题