2012-03-19 98 views
0

我對Objective-C仍然很陌生,所以我對此很難接受。在我的AppController中,當用戶點擊我的應用程序中的一個廣告時,關閉廣告並返回到我的應用程序,我想銷燬並重新創建廣告(關於爲什麼)。出於某種原因,但我的代碼無法正常工作。沒有錯誤或警告,但它沒有做我打算做的事。這是我的代碼如下所示: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文件發佈到最初的調用但它的一整頁或兩個

+1

[MoPubManager sharedManager] ..使用Singleton設計模式? – 2012-03-21 01:04:34

+0

@Malek_Jundi我不確定,對不起,我還是很新的。 – John 2012-03-21 01:35:41

+1

我的意思是在shareManager中你定義了一個靜態對象嗎?它更好地告訴我們你在做什麼在shareManager中,所以我們可以幫助你。 – 2012-03-21 05:04:51

回答

1

在行:

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

您所創建的MoPubManager類的實例。

接下來,您將檢查新實例化類的adView屬性是否不爲零。除非在MoPubManager的init方法中填充adView,否則這將始終爲零,因此不會調用destroyBanner方法。

但是,正在sharedManager上調用destroyBanner方法...指示正在使用的單例模式。因此,你不應該創建一個新的實例,因爲這違背了使用單例的原因。 (你永遠只能有一個類的一個實例時,使用單 - 見this for more info

沒有看到更多的代碼,看來你應該調用類似:

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

非常感謝! – John 2012-03-22 04:08:39

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