ぐーぐるAdMobが表示されないエラー、コードを代えて成功、アイフォンアプリ開発、AppController *app = (AppController*)[[UIApplication sharedApplication] delegate];で作成

ぐーぐるAdMobが表示されないエラー、コードを代えて成功、アイフォンアプリ開発
  前回のエラー、広告が表示されないはこちら
 
アイフォンで広告表示

 AdMobのSDKをGoogleAdMobAdsSdkiOS-6.4.1としました。6.3.0から。
しかし、広告は表示されず。残念

 <<<<>>>>>
 環境:cocos2d-iphone v2.1-rc1 
 XCODE 4.6.2 : Deployment Target 4.3
 AdMob  6.4.1 4/18/2013 Fixed a crash that occurred when the Advertising Identifier is nil.
 
 症状:AdMobが表示されない。つまり、ビューが表示されない。
 エラー: Must set the rootViewController property of GADBannerView before calling loadRequest:
 <<<<>>>>>
 
 
 以下、検討、結論(成功、AdMob表示されるようになりました。)
 
 
 AdMobが正常に表示されない改善
 1.最新版のAdMobSDKにする
 結果:だめでした。
 
 2.参考コードを参考にしてみる(成功)
 結果:広告が表示されました。(1)を参考にしました。
結論として、
AppController *app = (AppController*)[[UIApplication sharedApplication] delegate];
を追加して、app.navControllerを与えました。

 変更したコード
 

 AppController *app =  (AppController*)[[UIApplication sharedApplication] delegate];   
 gadbanner_.rootViewController=app.navController;
  [app.navController.view addSubview:gadbanner_];
  

 
 
 

 -(void)adMob{
    AppController *app =  (AppController*)[[UIApplication sharedApplication] delegate]; 
    CGRect rect = CGRectMake(0, 0, 320, 50);//top objective-cは左上座標系でcocos2dは下が原点
    gadbanner_ = [[GADBannerView alloc] initWithFrame:rect];
   
    
    gadbanner_.adUnitID = @"a1------hiden------b";//publisher ID
    //gadbanner_.rootViewController =[[[UIApplication sharedApplication] keyWindow] rootViewController];
    gadbanner_.rootViewController=app.navController;
    
     gadbanner_.delegate = self;
    [app.navController.view addSubview:gadbanner_];
    //[[[CCDirector sharedDirector] view] addSubview:gadbanner_];変更
    
    GADRequest *request = [GADRequest request];
    //GADRequestError *error;//=[GADRequestError initialize];
    request.testing = YES;//YESにしないと開発時はでません。NOは実機かな
    [gadbanner_ loadRequest:request];
    }
 

 参考
 (1)
 

 -(void)createAdmobAds
{
    AppController *app =  (AppController*)[[UIApplication sharedApplication] delegate];    
    // Create a view of the standard size at the bottom of the screen.
    // Available AdSize constants are explained in GADAdSize.h.
    mBannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerLandscape];

    // Specify the ad's "unit identifier." This is your AdMob Publisher ID.
    mBannerView.adUnitID = MY_BANNER_UNIT_ID;

    // Let the runtime know which UIViewController to restore after taking
    // the user wherever the ad goes and add it to the view hierarchy.

    mBannerView.rootViewController = app.navController;
    [app.navController.view addSubview:mBannerView];

    // Initiate a generic request to load it with an ad.
    [mBannerView loadRequest:[GADRequest request]];

    CGSize s = [[CCDirector sharedDirector] winSize];

    CGRect frame = mBannerView.frame;
    frame.origin.y = s.height;

    frame.origin.x = (s.width/2.0f - frame.size.width/2.0f);

    mBannerView.frame = frame;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    frame = mBannerView.frame;
    frame.origin.y = s.height - frame.size.height;
    frame.origin.x = (s.width/2.0f - frame.size.width/2.0f);

    mBannerView.frame = frame;
    [UIView commitAnimations];    

}
 

 
 (2)これは試していません。
 

 AppController *app = (AppController*) [[UIApplication sharedApplication] delegate];
[admobBannerView setRootViewController:[app navController]];
[[CCDirector sharedDirector].view addSubview:admobBannerView];

[admobBannerView loadRequest:[GADRequest request]];
 
 

こちらの記事もどうぞ