我已尝试在我的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.
所有内容都正确导入。如果还有什么我应该发布让我知道。
答案 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也不应该有空格