IOS 将值从 App Delegate 传递到初始视图控制器并在 viewWillAppear 中使用这些值

Posted

技术标签:

【中文标题】IOS 将值从 App Delegate 传递到初始视图控制器并在 viewWillAppear 中使用这些值【英文标题】:IOS pass values from App Delegate to initial viewcontroller and use those values in viewWillAppear 【发布时间】:2014-03-11 09:13:44 【问题描述】:

我不是一个优秀的 ios 开发人员(主要是做 web 的东西),但我被赋予了这个任务来完成工作。部分概念是应用程序必须在 webview 中加载 webapp。这是我设法做到的。然后接下来是将推荐信息输入应用程序,在加载之前必须将其连接到 webapp 的 url。我成功地使用 Appsflyer 将推荐信息输入我的应用程序(对于与附属公司合作的任何人来说,这很酷),现在我被困住了,因为我尝试的一种方法是在我的委托中使用 NSUserDefaults 存储信息并在之前调用它我加载了网址,但它并不总是及时完成。

这是我的观点WillAppear

    - (void) viewWillAppear:(BOOL)animated
     
       _webview.scrollView.bounces = NO;
       _webview.backgroundColor = [UIColor grayColor];
       _webview.opaque=NO;
       _webview.scalesPageToFit = YES;
       NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
       NSArray *btags = [prefs arrayForKey:@"banner"];
       NSLog(@"%@", btags);
       NSString *neededstring = [btags objectAtIndex:0];
       NSString *ourURL = @"http://mydomain.com?ref=";
       ourURL = [ourURL stringByAppendingString:neededstring];
       NSLog(@"%@", ourURL);
       NSURL *url = [NSURL URLWithString: ourURL];
       NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
       NSLog(@"Loading url");
       [_webview loadRequest:requestObj];
    

这是我的 AppDelegates onConversionDataReceived 方法

    -(void)onConversionDataReceived:(NSDictionary*) installData 
      NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];  //load NSUserDefaults
      id status = [installData objectForKey:@"af_status"];
      if([status isEqualToString:@"Non-organic"]) 
        id pid = [installData objectForKey:@"pid"];
        id campaign = [installData objectForKey:@"c"];
        id landingPage = [installData objectForKey:@"af_sub1"];
        NSLog(@"None organic istall pid=%@  campaign=%@ landing page:%@", pid, campaign, landingPage);
        NSLog(@"here");
        NSMutableArray *tags = [ NSMutableArray arrayWithObjects:pid,campaign, nil];  //declare array to be stored in NSUserDefaults
        [prefs setObject:tags forKey:@"banner"];  //set the prev Array for key value "favourites"
      else if([status isEqualToString:@"Organic"]) 
        NSLog(@"organic");
        // handle organic install
        NSString *pid = @"6544581";
        NSMutableArray *tags = [NSMutableArray arrayWithObjects:pid, nil];
        [prefs setObject:tags forKey:@"banner"];
       else 
        // not expecting to be here
    

我的另一个想法是创建一个在此视图控制器之前运行的附加视图控制器,但问题仍然存在,如果推荐信息没有及时通过会发生什么。

如果有人能给我一些光明,我将不胜感激。

谢谢你:)

【问题讨论】:

【参考方案1】:

你应该打电话

[prefs synchronize];

如果您希望效果立即生效,请在首选项中设置“setObject:forKey:”。此外,您可以从 AppDelegate 实例化初始 View Controller 并创建一些您将在其中设置的自定义属性。

【讨论】:

谢谢!我从代表那里启动了初始视图,它有效! 没问题,很高兴我能帮上忙!

以上是关于IOS 将值从 App Delegate 传递到初始视图控制器并在 viewWillAppear 中使用这些值的主要内容,如果未能解决你的问题,请参考以下文章

将值从 iOS 本机代码传递给 cordova

如何将值从 javascript 传递到 iOS UIWebView

如何将值从javascript传递到iOS UIWebView

如何将值从angularjs传递给节点[重复]

Objective-c:将值从 AppDelegate 传递给 UIViewController

将值从presentingViewController 传回presentingViewController