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 に答える