2013-02-03 50 views
0

這似乎是有史以來最愚蠢的問題,但在涉及所有Apple的文檔和無用的在線教程後,我仍然無法弄清楚如何在我的應用程序中正確實施iAds。所以,我的應用程序從桌面視圖控制器開始,我在導航欄下方和桌面上方有一個iAd對象。現在iAd在加載失敗時不會隱藏?

,在我的代碼:(我也有加入iAd的框架)

#import <UIKit/UIKit.h> 
#import <iAd/iAd.h> 

@interface MasterTableViewController : UITableViewController <ADBannerViewDelegate> 
{ 
    IBOutlet ADBannerView *iAd; 
} 
@property(nonatomic, readonly, getter=isBannerLoaded) BOOL bannerLoaded; 
@end 

然後在.m文件現在

#import "MasterTableViewController.h" 

@interface MasterTableViewController() 
@end 

@implementation MasterTableViewController 
@synthesize bannerLoaded; 

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave 
{ 
    if (!willLeave) 
    { 
     // nothing in this case thanks to ARC 
    } 
    return YES; 
} 

- (void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    iAd.hidden = NO; 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    iAd.hidden = YES; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    for (int i = 0; i > 0; i++) 
    { 
     if (bannerLoaded) 
     { 
      iAd.hidden = NO; 
     } 
     else 
     { 
      iAd.hidden = YES; 
     } 
    } 
} 

,問題是,當我測試應用程序沒有互聯網連接iAd不加載(顯然),但它也不隱藏。所以,在屏幕的頂部,我留下了一個巨大的白色矩形。否則,當連接可用時,廣告可以正常工作。有沒有人有任何想法?此外 - 我只是添加了無盡的循環,看看他們是否有所作爲,這些都是完全有目的的大聲笑。

回答

0

您有財產bannerLoaded用於保存您的廣告狀態,這很好。

在第一個,在你viewDidLoad方法的iAd無法加載,所以你必須設置相應的屬性:self.bannerLoaded = NO;

然後,當您收到/未收到您的廣告,您需要更新此屬性。

- (void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    if (!self.bannerLoaded) { 
     iAd.hidden = NO; 
     self.bannerLoaded = YES; 
    } 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    if (self.bannerLoaded) { 
     iAd.hidden = YES; 
     self.bannerLoaded = NO; 
    } 
} 
+0

同樣的問題:(當我從所有數據斷開連接並測試應用程序時,我仍然會看到白色矩形。 – user1751797

+0

實際上,當沒有互聯網連接時,我不認爲'bannerView:didFailToReceiveAdWithError:'會被調用。您需要實現一些其他方法來處理互聯網連接檢查。請看Apple提供的'Reachability'庫:http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro。 html – Yaman

+0

嗯,我花了大約一個小時左右的時間尋找答案,我想我已經提出了一個解決方案。我不相信可達性類涉及到,但我不能肯定地說:P所以,我在iOS模擬器上做了一次嘗試,結果有很大的不同。它給我錯誤說我的橫幅沒有代表。所以,在ViewDidLoad中我做了:iAd.delegate = self;並重新運行它,它似乎按預期工作。然後我在我的iPhone上測試了它,幾分鐘後它按預期工作。我認爲iPhone上的測試讓它變得混亂起來。感謝你的幫助! – user1751797

1

我假設您通過故事板添加了您的ADBannerView,因爲我無法看到您初始化橫幅位置的位置。

  1. 在故事板中,將初始位置設置在屏幕外。
  2. 在「bannerViewDidLoadAd」中,將橫幅設置爲視圖的動畫效果。
  3. 在「bannerView:didFailToReceiveAdWithError:」中,將標題設置爲不可見。

這裏有一個很好的例子https://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/iAd_Guide/WorkingwithBannerViews/WorkingwithBannerViews.html

希望這有助於。我剛剛實現了這一點,但目前無法訪問我的代碼。

它在模擬器中出現一些錯誤,但在設備上正常工作。

我已經在iOS6上測試過了,即使顯示了iAd,用戶也會失去連接(所以它看起來像是爲我調用了「bannerView:didFailToReceiveAdWithError:」)。