如何将数据从 AppDelegate 传递到 ViewController?

Posted

技术标签:

【中文标题】如何将数据从 AppDelegate 传递到 ViewController?【英文标题】:How to pass data from AppDelegate to ViewController? 【发布时间】:2012-12-03 05:18:54 【问题描述】:

我正在使用 Safari 浏览网页。单击此页面上的按钮后,我的 Ipad 将启动我的应用程序。所以我在AppDelegate.m中实现了方法- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    if (!url)   return NO;    
    NSString *URLString = [url absoluteString];
    self.paramArray = [URLString componentsSeparatedByString:@"@"];
    NSLog(@"%d",[self.paramArray count]);
    for (int i = 1; i < [self.paramArray count]; i++) 
        NSLog([self.paramArray objectAtIndex:i]);
    
    return YES;

我在网页上使用的 url 类似于 myapp://@first_part@second_part@third_partself.paramArray存储url的子串(myapp://first_partsecond_partthird_part)。

现在我想在我的ViewController 的文本字段中显示这些字符串。如何将此 NSArray 传递给ViewController

【问题讨论】:

【参考方案1】:

这只是完成它所需的几行代码。

将此行放入 appDelegate.h 文件中

首先你需要遵守如下协议

@interface AppDelegate : UIResponder <UIApplicationDelegate>

现在需要声明一个属性供它使用,如下所示

@property (strong, nonatomic) id<UIApplicationDelegate>delagete;

现在在视图控制器中使用该属性的最后一个阶段如下

在视图控制器的.h文件中 首先引用 appdelegate 像这样#import "AppDelegate.h" 然后在@interfaceAppDelegate *appDel; 中添加一个 iVar

现在在 .m 文件中 将appDel = [[UIApplication sharedApplication]delegate]; 放在视图中确实加载方法并访问appdelegate 的所有属性,如appDel.paramArray

快乐编码:)

【讨论】:

你能给我更多的细节吗?比如我应该在哪里添加这些行? 这样可以吗?或需要更多信息? :) 我按照你说的做了。但是我的viewDidLoad 方法中的[appDel.paramArray count] 返回0。什么时候会调用- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url paramArray 是不是在 appDelegate.h 文件中声明的(强、非原子)属性之一? 在视图加载并处于出现状态后,即在 viewDidAppear 中,我认为方法将非常适合这个:)

以上是关于如何将数据从 AppDelegate 传递到 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据库从 AppDelegate 传递到 ViewController

将数据从 ViewController 传递到 AppDelegate

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

使用没有 segues 的协议将数组从 appDelegate 传递到 Viewcontroller

AppDelegate segue 替代传递数据

将数组从 ViewController 传递给 AppDelegate