不断地在两个视图控制器之间传递数据 iOS
Constantly passing data between two view controllers iOS
我是 objective-c 的新人。我尝试在 2 个视图控制器(例如 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'
知道如何正确调用此方法吗?
只要你要修改的view controller在navigation stack中,我会尝试类似这样的方法来找到你想要修改其属性的view controller。
let childVCs = UIApplication.shared.keyWindow!.rootViewController?.childViewControllers
print("childvcs = \(childVCs)")
let myVC = childVCs[0]
let myOtherVC = childVCs[1]
myVC.someProperty = 100
myOtherVC.anotherProperty = 1000
In MVC as implemented in iOS/Objective-C,视图控制器引用 共享模型 ,而不是相互引用。他们应该观察该模型的变化,然后相应地更新他们的用户界面。
观察变化的几种方法:
- KVO - 将对模型值的更改连接到观察者中的目标和选择器
- Notification - 允许模型 "post" 它已更改并查看控制器 "observe" 那些帖子。
- Delegation - 这是最直接的(最被过度使用的,IMO)方法,其中一个对象通过一些定义明确的接口(协议)为另一个对象提供完成功能。
我是 objective-c 的新人。我尝试在 2 个视图控制器(例如 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'
知道如何正确调用此方法吗?
只要你要修改的view controller在navigation stack中,我会尝试类似这样的方法来找到你想要修改其属性的view controller。
let childVCs = UIApplication.shared.keyWindow!.rootViewController?.childViewControllers
print("childvcs = \(childVCs)")
let myVC = childVCs[0]
let myOtherVC = childVCs[1]
myVC.someProperty = 100
myOtherVC.anotherProperty = 1000
In MVC as implemented in iOS/Objective-C,视图控制器引用 共享模型 ,而不是相互引用。他们应该观察该模型的变化,然后相应地更新他们的用户界面。
观察变化的几种方法:
- KVO - 将对模型值的更改连接到观察者中的目标和选择器
- Notification - 允许模型 "post" 它已更改并查看控制器 "observe" 那些帖子。
- Delegation - 这是最直接的(最被过度使用的,IMO)方法,其中一个对象通过一些定义明确的接口(协议)为另一个对象提供完成功能。