1

我曾尝试在我的应用程序委托中使用单例类,但我无法让它工作。我还查看了 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.

一切都正确导入。如果还有什么我应该发布的,请告诉我。

4

1 回答 1

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;
}

显然改变了类的名称。

每当您想在任何视图控制器中使用单例时,只需像这样调用它:

locationManager = [LocationManagerSingleton sharedInstance];

不要忘记添加

+ (LocationManagerSingleton*) sharedInstance;

在标题上。

编辑

好吧,看来我误解了您的代码(忘记我的回答,您只是希望能够从任何地方访问您的 iAdController。所以只需放置

在 ViewController 的 .m 中添加

@interface ViewController()
{
    iAdController *iadc; 
}

而在里面

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

但是在您想要使用它的任何视图控制器上导入应用程序 delegate.h。

#import "AppDelegate.h" 

@interface 上的 AppDelegate 中也不应该有空格

于 2012-08-10T05:37:26.997 回答