IOS将App Delegate中的值传递给初始viewcontroller,并在viewWillAppear中使用这些值

时间:2014-03-11 09:13:45

标签: ios iphone uiviewcontroller uiwebview appdelegate

我不是一个优秀的IOS开发人员(主要是做网络工作),但却被赋予了这项工作。部分概念是应用程序必须在webview中加载webapp。这是我设法做到的。然后接下来是将推荐信息引入应用程序,在加载之前必须将其连接到webapp的URL。我成功地使用Appsflyer将推介信息传递到我的应用程序中(对于任何与分支机构合作的人来说这很酷)现在我陷入困境,因为我尝试的方法之一是使用NSUserDefaults在我的代理中存储信息并在之前调用它我加载了网址,但并不总是及时完成。

这是我的viewWillAppear

    - (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 个答案:

答案 0 :(得分:1)

你应该致电

[prefs synchronize];

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