从 AppDelegate 中的 ViewController 获取参数。

Posted

技术标签:

【中文标题】从 AppDelegate 中的 ViewController 获取参数。【英文标题】:Get param from ViewController in AppDelegate. 【发布时间】:2014-03-23 01:20:36 【问题描述】:

我需要在 AppDelegate 中获取某个 ViewController 的一个参数。

它不是 AppDelegate 的根。

什么是更快的方法呢?委托?

【问题讨论】:

投反对票,因为为此问题提供的详细信息不足。在您期望任何人帮助您之前,您应该共享您的代码和视图控制器层次结构。 【参考方案1】:

将其设为您的 VC 上的属性,然后您的 AppDelegate 可以根据需要访问它。

【讨论】:

我不能,我不是从 rootVC 子创建这个 VC 您应该能够向任何 VC 子类添加属性。不管它是否是rootVC。或者你是说你没有指向 VC 的变量来访问它的属性?如果是这样,请在您的 AppDelegate 上创建一个属性并将您的 VC 设置为它(这样您就可以访问其他属性),或者只是将相关变量分配给 AppDelegate 上的一个属性。【参考方案2】:

首先,您的设计存在严重错误,否则您不需要做这样的事情。

其次,您没有提供有关您的 VC 层次结构的任何相关信息,并且对此没有通用解决方案。

但是,这里有一些解决方法/补丁:

1) 如果您使用故事板,您可以使用:

UIStoryboard* sb = [UIStoryboard storyboardWithName:@"mystoryboard" 捆绑:无]; UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"ExampleViewController"];

2) 您可以将视图控制器设为单例并直接从 AppDelegate 访问它

3) Hacky 方法:在 AppDelegate 中有一个@property (nonatomic, retain) UIVIewController *hackyViewController;

在 hackyViewController.m 中这样做

-(void)viewDidLoad // 调用超级 YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; YourAppDelegate.hackyViewController =self;

理想情况下,您应该使用 UIVIewcontroller 的 parentViewController 和 childViewcontroller 属性浏览视图控制器层次结构以获取实例。您还可以创建一个递归函数,该函数在所有 childViewcontroller 中导航并使用 iSKindOf 检查实例来识别您正在寻找的 viewcontroller,但此方法不适用于所有 ios 配置。

【讨论】:

以上是关于从 AppDelegate 中的 ViewController 获取参数。的主要内容,如果未能解决你的问题,请参考以下文章

IOS 从 AppDelegate 中的 addMessageFromRemoteNotification 显示 UIViewController

从 ViewController 访问 AppDelegate 中的对象

Swift:从 AppDelegate 中的 UNTextInputNotificationAction 获取内容

如何将 CoreLocation 值从一个 VIewController 传递到 iOS 中的 AppDelegate?

从 appDelegate 呈现 ViewController

如何从 ViewController 或其他地方调用或触发 AppDelegate 中的通知功能?