2015-04-30 9 views
5

sto cercando di integrare in un progetto iAd cocos2d-x come descritto in: http://becomingindiedev.blogspot.com.es/2015/02/integrating-iad-in-cocos2d-x-v3x.htmlCome risolvere "l'accesso dell'utente in tipo incompleto" errore

AdBanner.h

#import <Foundation/Foundation.h> 
#import <iAd/iAd.h> 
@class RootViewController; 
@interface AdBanner : NSObject<ADBannerViewDelegate> 
{ 
    UIWindow* window; 
    RootViewController* rootViewController; 
    ADBannerView* adBannerView; 
    bool adBannerViewIsVisible; 
} 

AdBanner.mm

@implementation AdBanner 

-(id)init 
{ 
    if(self=[super init]) 
    { 
    adBannerViewIsVisible = YES; 
    rootViewController = 
     (RootViewController*) [[[UIApplication sharedApplication] keyWindow] rootViewController]; 
    window = [[UIApplication sharedApplication] keyWindow]; 
    [self createAdBannerView]; 
    } 
    return self; 
} 

-(void)layoutAnimated:(BOOL)animated 
{ 
    CGRect bannerFrame = adBannerView.frame; 
    //Has the banner an advestiment? 
    if (adBannerView.bannerLoaded && adBannerViewIsVisible) 
    { 
     NSLog(@"Banner has advertisement"); 
     bannerFrame.origin.y = window.bounds.size.height - bannerFrame.size.height; 
    } else 
    { 
     NSLog(@"Banner has NO advertisement"); 
     //if no advertisement loaded, move it offscreen 
     bannerFrame.origin.y = window.bounds.size.height; 
    } 
    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ 
     [rootViewController.view layoutIfNeeded]; //Member access into incomplete type "RootViewController" 
     adBannerView.frame = bannerFrame; 
    }]; 
} 
@end 

la linea in basso nella AdBanner.mm dà l'errore:

[rootViewController.view layoutIfNeeded]; //Member access into incomplete type "RootViewController" 

Come si risolve?

+0

'rootViewController' sembra un puntatore, prova' -> '? – user3528438

+0

Questo è codice C++ oggettivo. –

+0

E 'stato taggato C++ prima che vsoftco lo abbia modificato ..... – user3528438

risposta

9

Hai dichiarato RootViewController come una dichiarazione di classe inoltrata nel file .h utilizzando la direttiva @Class, ma non hai importato RootViewController.h nel file ADBanner.mm.

Ciò significa che il compilatore sa che esiste una classe RootViewController ma non ne sa più nulla - la sua superclasse, i suoi metodi o le sue proprietà. Come tale, non può confermare che in realtà abbia un metodo layoutIfNeeded.

L'aggiunta di #import "RootViewController.h" all'inizio di ADBanner.mm fornisce al compilatore le informazioni necessarie e risolve l'errore.

Problemi correlati