如何将数据从 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?的主要内容,如果未能解决你的问题,请参考以下文章