如何将 AppDelegate 的引用发送到 Viewcontroller 子类?

Posted

技术标签:

【中文标题】如何将 AppDelegate 的引用发送到 Viewcontroller 子类?【英文标题】:How to send reference of AppDelegate to Viewcontroller subclass? 【发布时间】:2014-12-28 13:38:39 【问题描述】:

我已经继承了一个 viewController 类,像这样......

.h 文件

#import "GADBannerView.h"

@interface ViewController : SPViewController

    GADBannerView *bannerView;


@property GADBannerView *bannerView;

@end

.m 文件

#import "ViewController.h"
#import "GADBannerView.h"
#import "GADRequest.h"

@implementation ViewController

@synthesize bannerView;

- (void)viewDidLoad 

    [super viewDidLoad];
    // Do any additional setup after loading the view.

    bannerView = [[GADBannerView alloc] initWithFrame:CGRectMake(0,0, 320, 50)];

    // Replace this ad unit ID with your own ad unit ID.
    self.bannerView.adUnitID = @"ca-app-pub-LONG ID HERE";
    self.bannerView.rootViewController = self;

    [self.view addSubview:bannerView];

    GADRequest *request = [GADRequest request];

    // Requests test ads on devices you specify. Your test device ID is printed to the console when
    // an ad request is made.
    request.testDevices = @[ GAD_SIMULATOR_ID, @"SIM ID HERE" ];
    [self.bannerView loadRequest:request];




- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

*/

@end

在我的 AppDelegate 中有这个

 _viewController = [[ViewController alloc] init];


    [_viewController startWithRoot:[Game class] supportHighResolutions:YES doubleOnPad:YES];

    [_window setRootViewController:_viewController];
    [_window makeKeyAndVisible];

一切正常,但我需要能够在 ViewController 子类中放置一个开关,以判断是否设置了 AdMob 广告,这是一个布尔值,将在 plist 中设置,可通过 AppDelegate 访问,所以我需要将 AppDelegate 的引用发送到我的子类 ViewController,这样我就可以执行类似的操作

if ([[appDelegate.coreData objectForKey:@"AdMob"] boolValue] == YES) 
       //Admob setup here
    

在我的 ViewController 子类中。如何在 ViewController 子类中获取对 AppDelegate 的引用?

【问题讨论】:

【参考方案1】:
#import "AppDelegate.h"
// ...
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

【讨论】:

酷,如果我想将另一个类的引用发送到我的 ViewController 子类怎么办? 这取决于什么类以及它的对象是如何创建的。 (sharedApplication 是一个单例对象,所以它可以在任何地方使用。) 但是我不明白的是,当你实例化它时,你如何将一个类(只是一个标准类)的引用发送到我的 ViewController 子类,因为它在父类上调用 Init ,所以我不知道如何将某些东西传递给子类。 您可能需要举一个实际的例子。您说的是“类”,但我怀疑您的意思是“对象”。如果您真的指的是“类”,那么这只是您已经对 GADBannerView 类所做的事情。 你可能是对的,我的意思是对象,我如何将一个类的引用发送到我的子类?

以上是关于如何将 AppDelegate 的引用发送到 Viewcontroller 子类?的主要内容,如果未能解决你的问题,请参考以下文章

AppDelegate - 发送到实例的无法识别的选择器[关闭]

如何将 appDelegate 绑定到应用程序的其余部分?

AppDelegate.m 需要将数据发送到单独的 ViewController 的 WebView

从 appdelegate 在 vi​​ewcontroller 中设置 BOOL

如何从app delegate访问NSViewController?

引用在 AppDelegate 中创建的 NSPersistentStore 实例