在两个视图控制器iOS之间不断传递数据

时间:2016-11-28 15:39:12

标签: ios objective-c xcode uiviewcontroller rootview

我是Objective-c的新手。我尝试在2个视图控制器之间发送数据(例如controllerA和controllerB),但我不断地需要这些数据,所以我在controllerB中使用_displaylink从controllerA调用方法。我在controllerA中使用播放器,我想在controllerB中显示时间等。如何获得controllerA的现有实例?

我尝试了两种不同的方法,但都创建了viewcontroller的新实例

示例1:

drop table if exists <table> tbl; select into <tabel> tbl from query;

示例2:

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

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

我也尝试这个解决方案:

RootViewController *parent=self.parentViewController;

但是当我尝试调用该方法时,我得到了这个错误:

  

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

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

2 个答案:

答案 0 :(得分:1)

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

观察变化的几种方法:

  • KVO - 将对模型值的更改连接到观察者中的目标和选择器
  • Notification - 允许模型发布&#34;发布&#34;它被改变并查看控制器以观察&#34;那些帖子。
  • Delegation - 这是最直接(最过度使用的IMO)方法,其中一个对象通过一些明确定义的接口(协议)为另一个对象提供完成功能。

答案 1 :(得分: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