0

私はまだObjective-Cに慣れていないので、これに苦労しています。私の AppController では、ユーザーがアプリ内の広告の 1 つをクリックし、広告を閉じてアプリに戻ると、広告を破棄して再作成したいと思います (理由については長い話です)。何らかの理由で、私のコードは機能しません。エラーや警告はありませんが、意図したとおりに動作しません。これは私のコードがどのように見えるかです:

#import "MoPubManager.h"

……

- (void)applicationWillEnterForeground:(UIApplication *)application
{

    MoPubManager *obj = [[MoPubManager alloc] init];

    if( obj.adView ) {
        [[MoPubManager sharedManager] destroyBanner];
    }
    [obj.adView refreshAd];

}

_adView、バナーの破棄、広告の更新はいずれも MoPubManager ファイルに含まれているため、ご覧のとおり、ファイルをインポートして MoPubManager をオブジェクトに変換しました。(obj.adView はもともと MoPubManager.h の _adView にすぎませんでしたが、警告を回避するために obj.adView に切り替える必要がありました。) 間違った呼び出しを使用している可能性があります。呼び出しが最初にあった場所に MoPubManager.mm ファイルを投稿します。しかし、そのフルページまたは2

4

3 に答える 3

1

行で:

MoPubManager *obj = [[MoPubManager alloc] init];

MoPubManagerクラスの新しいインスタンスを作成しています。

次に、新しくインスタンス化されたクラスのadViewプロパティがnilでないかどうかを確認しています。AdViewがMoPubManagerのinitメソッドに入力されない限り、これは常にnilになるため、destroyBannerメソッドは呼び出されません。

ただし、destroyBannerメソッドはsharedManagerで呼び出されています...使用中のシングルトンパターンを示しています。したがって、シングルトンを使用する理由に反するため、新しいインスタンスを作成しないでください。(シングルトンを使用する場合、クラスのインスタンスは1つだけです。詳細については、これを参照してください

これ以上コードが表示されない場合は、次のような呼び出しを行う必要があるようです。

if( [MoPubManager sharedManager].adView ) {
    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];
于 2012-03-21T15:58:29.277 に答える
1

まず、MoPubManagerとはどのサブクラスですか...正常にコンパイルされますか?ここでの問題は、新しいMoPubManagerインスタンスを作成しているようですが、シングルトンを使用してインスタンスを破棄しており、同じ参照を持っていません。次のような異なるものを使用する必要があります。

MoPubManager *obj = [[MoPubManager alloc] init];

if( [MoPubManager sharedManager].adView ) {

    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];
于 2012-03-21T15:59:57.070 に答える
1

シングルトン パターンを正しく使用していません。

これを試してください、多分あなたを助けるでしょう

- (void)applicationWillEnterForeground:(UIApplication *)application
{

    MoPubManager *obj = [MoPubManager sharedManager];

    if( obj.adView ) {
        [obj destroyBanner];
    }
    [obj.adView refreshAd];
}
于 2012-03-21T16:00:54.883 に答える