2012-03-19 14 views
0

私はまだObjective-Cを使い始めていないので、これでは苦労しています。私のAppControllerでは、ユーザーがアプリ内の広告の1つをクリックし、広告を閉じて自分のアプリに戻ると、広告を破棄して再作成したいと思います。しかし何らかの理由で、私のコードが動作していません。エラーや警告はありませんが、意図したことはしません。これは私のコードは次のようになります。......iOS:別のファイルからの呼び出しをインポートする際の問題

#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

+1

[MoPubManager sharedManager] ..シングルトンデザインパターンを使用していますか? –

+0

@Malek_Jundi私は確信しています、申し訳ありません、私はまだこれに新しいです。 – John

+1

私はあなたが静的オブジェクトを定義しているのですか?あなたがshareManagerの中で何をしているのかを私たちに見せてもらえるようにしてください。 –

答えて

1

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

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

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

ただし、使用中のシングルトンパターンを示すsharedManager ...に対してdestroyBannerメソッドが呼び出されています。したがって、これはシングルトンを使用する理由に反するため、新しいインスタンスを作成すべきではありません。 (シングルトンを使用している場合にのみ、これまでにクラスのインスタンスを1つ持っている - this for more info参照)より多くのコードを見ることなく

を、それはあなたのような何かを呼び出すべきであると思われる:

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

ありがとうございました! – John

1

まず、どのようなサブクラスMoPubManagerです...それはうまくコンパイル?ここでの問題は、新しいMoPubManagerインスタンスを作成しているようですが、シングルトンを使用してそのインスタンスを破棄していて、同じ参照がないことが原因です。

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

if([MoPubManager sharedManager].adView) { 

    [[MoPubManager sharedManager] destroyBanner]; 
} 
[[MoPubManager sharedManager].adView refreshAd]; 
1

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

は多分あなたに役立つ、これを試して

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

    MoPubManager *obj = [MoPubManager sharedManager]; 

    if(obj.adView) { 
     [obj destroyBanner]; 
    } 
    [obj.adView refreshAd]; 
} 
関連する問題