如何在许多视图控制器中创建iAd横幅的单个共享实例?

时间:2012-08-10 04:52:25

标签: ios singleton iad shared viewcontroller

我已尝试在我的app委托中使用单例类,但我无法让它工作。我还检查了iAdSuite示例(特别是containerBanner示例,因为它似乎是最相对的),但我无法弄明白。如果有一个更好的方法来实现这一点而不使用单例类,你可以指出我正确的方向,我真的很感激它。我的一些单例类代码如下。谢谢!

@interface App Delegate

@property (assign) iAdController *iadc;
+ (AppDelegate*) sharedApplication;
- (iAdController*)sharedAd;
@end

@implementation AppDelegate

@synthesize iadc;

+ (AppDelegate*) sharedApplication
{
return [[UIApplication sharedApplication] delegate];
}

-(iAdController*)sharedAd
{
    if(iadc==nil){
        iadc=[iAdController new];
    }
    return iadc;
}


@interface ViewController

iAdController*iadc=[[AppDelegate sharedApplication] sharedAd];
//here i get an error saying, "initializer element is not a compile-time constant.

所有内容都正确导入。如果还有什么我应该发布让我知道。

1 个答案:

答案 0 :(得分:0)

尝试将单身人士创作更改为:

+ (LocationManagerSingleton*)sharedInstance {

    static LocationManagerSingleton *_sharedInstance;
    if(!_sharedInstance) {
        static dispatch_once_t oncePredicate;
        dispatch_once(&oncePredicate, ^{
            _sharedInstance = [[super allocWithZone:nil] init];
        });
    }

    return _sharedInstance;
}



+ (id)allocWithZone:(NSZone *)zone {    

    return [self sharedInstance];
}


- (id)copyWithZone:(NSZone *)zone {
    return self;    
}

- (id)init
{
    self = [super init];
    if (self != nil) 
    {
        // PERFORM any custom initialization here
    }
    return self;
}

显然更改了班级的名称。

每当你想在你的任何一个viewcontrollers中使用你的单例时,只需这样调用它:

locationManager = [LocationManagerSingleton sharedInstance];

别忘了添加

+ (LocationManagerSingleton*) sharedInstance;
标题上的

修改

好吧,似乎我误解了你的代码(忘了我的答案,你只是希望能够从任何地方访问你的iAdController。所以只是放置

在ViewController的.m中添加

@interface ViewController()
{
    iAdController *iadc; 
}

-(void)viewDidLoad
{
    iadc=[[AppDelegate sharedApplication] sharedAd];
}

但是在你想要使用它的任何一个viewcontroller上导入app delegate.h。

#import "AppDelegate.h" 

@interface

上的AppDelegate也不应该有空格