Wie zu beheben "Member-Zugang in incomplete type" - Fehler
Ich versuche mich zu integrieren iAd in eine cocos2d-x-Projekt, wie beschrieben in:
http://becomingindiedev.blogspot.com.es/2015/02/integrating-iad-in-cocos2d-x-v3x.html
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
In der unteren Zeile in AdBanner.mm gibt den Fehler:
[rootViewController.view layoutIfNeeded]; //Member access into incomplete type "RootViewController"
Wie kann ich dies beheben ?
rootViewController
sieht aus wie ein Zeiger, versuchen ->
?Dies ist objective-c++ - code.
Es wurde getaggt c++ vor vsoftco bearbeitet es.....
Sie haben
#import "RootViewController.h"
im AdBanner.mm?Der Kommentar von @Paulw11, was Sie brauchen. Die .h-Datei hat nur eine vorwärts-Deklaration von
RootViewController
. Die .mm muss tatsächlich importieren die header für RootViewController
. Paul - poste es als Antwort.InformationsquelleAutor Kaizer Sozay | 2015-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie erklärt
RootViewController
als forward-Deklaration der Klasse bei Ihr .h-file, mithilfe der@Class
Richtlinie, aber Sie haben nicht importiert RootViewController.h in Ihrem ADBanner.mm-Datei.Dies bedeutet, dass der compiler weiß, dass es einige Klasse
RootViewController
weiß aber nicht, nichts mehr über die es - Ihrer übergeordneten Klasse, Methoden oder Eigenschaften. Als solche kann es nicht bestätigen, dass es tatsächlich eine MethodelayoutIfNeeded
.Hinzufügen
#import "RootViewController.h"
an die Spitze der ADBanner.mm geben dem compiler die Informationen, die es braucht und den Fehler beheben.InformationsquelleAutor Paulw11