2014-11-28 2 views
0

Edit: Вот мой AppDelegate а (часть его)МААШ до сих пор отказываются работать

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; 
    GameViewController *gameViewController = [[GameViewController alloc]init]; 
    NSLog(@"NSLOG %@", [[gameViewController view]class]); 
    _bannerViewController = [[BannerViewController alloc]initWithContentViewController:gameViewController]; 

    self.window.rootViewController = _bannerViewController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

Я собирался сдаваться. Я попробовал 5 различных способов только за последние несколько дней, чтобы получить буквально один единственный iAd, чтобы показывать правильно и так же просто, как Apple, кажется, буквально в 100% случаев я либо не вижу объявления, либо получаю сообщение об ошибке. Я следил за документацией Apple ТОЧНО.

Единственный ключ у меня есть в этих двух строках

GameViewController *gameViewController = [[GameViewController alloc]init]; 
    NSLog(@"NSLOG %@", [[gameViewController view]class]); 

, которые находятся в моем приложении делегата. NSLog дает мне «UIView». Нет почему? Почему бы это никогда не было UIView, это должен быть SKView, потому что GameViewController был предварительно написан для меня яблоком для комплекта спрайтов. Как могло это возможно дать мне неправильный объект?

Я получаю 'NSInvalidArgumentException', reason: '-[UIView scene]: unrecognized selector sent to instance 0x174191780', который другие рекомендовали исправить, поставив originalContent заявление, но у меня уже есть это и он не работает.

Баннер-контроллер:

#import "BannerViewController.h" 

NSString * const BannerViewActionWillBegin = @"BannerViewActionWillBegin"; 
NSString * const BannerViewActionDidFinish = @"BannerViewActionDidFinish"; 

@interface BannerViewController() <ADBannerViewDelegate> 

@end 

@implementation BannerViewController { 
    ADBannerView *_bannerView; 
    UIViewController *_contentController; 
} 

-(instancetype)initWithContentViewController:(UIViewController *)contentController{ 
    NSAssert(contentController != nil, @"Attempting to initialize a BannerViewController with a nil contentController."); 

    self = [super init]; 
    if (self != nil) { 
     _bannerView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner]; 
     _contentController = contentController; 
     _bannerView.delegate = self; 
    } 
    return self; 
} 
-(void)loadView{ 
    UIView *contentView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; 

//Have also tried SKView *contentView = [[SKView alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; 

    [contentView addSubview:_bannerView]; 
    [self addChildViewController:_contentController]; 
    [contentView addSubview:_contentController.view]; 
    [_contentController didMoveToParentViewController:self]; 

    self.view = contentView; 
} 
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ 
    return [_contentController preferredInterfaceOrientationForPresentation]; 
} 
-(NSUInteger)supportedInterfaceOrientations{ 
    return [_contentController supportedInterfaceOrientations]; 
} 
-(void)viewDidLayoutSubviews{ 
    CGRect contentFrame = self.view.bounds, bannerFrame = CGRectZero; 

    bannerFrame.size = [_bannerView sizeThatFits:contentFrame.size]; 

    if(_bannerView.bannerLoaded){ 
     contentFrame.size.height -= bannerFrame.size.height; 
     bannerFrame.origin.y = contentFrame.size.height; 

    }else{ 
     bannerFrame.origin.y = contentFrame.size.height; 
    } 

    _contentController.view.frame = contentFrame; 
    _bannerView.frame = bannerFrame; 
} 
-(void)bannerViewDidLoadAd:(ADBannerView *)banner{ 
    [UIView animateWithDuration:0.25 animations:^{ 
     [self.view setNeedsLayout]; 
     [self.view layoutIfNeeded]; 
    }]; 
} 
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ 
    [UIView animateWithDuration:0.25 animations:^{ 
     [self.view setNeedsLayout]; 
     [self.view layoutIfNeeded]; 
    }]; 
} 
-(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave{ 
    [[NSNotificationCenter defaultCenter]postNotificationName:BannerViewActionWillBegin object:self]; 
    return YES; 
} 
-(void)bannerViewActionDidFinish:(ADBannerView *)banner{ 
    [[NSNotificationCenter defaultCenter]postNotificationName:BannerViewActionDidFinish object:self]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

Game Посмотреть контроллер:

@interface GameViewController() 
@property (nonatomic, strong) IBOutlet UIView *contentView; 

@end 

@implementation GameViewController { 

} 
-(instancetype)init{ 
    self = [super init]; 
    if (self) { 

    } 
    return self; 
} 
-(void)viewDidLoad{ 
    //self.canDisplayBannerAds = YES; 
    [super viewDidLoad]; 
} 
-(void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:animated]; 
} 
-(void)viewDidDisappear:(BOOL)animated{ 
    [super viewDidDisappear:animated]; 
} 
-(void)viewDidLayoutSubviews{ 
} 
-(void)viewWillLayoutSubviews{ 
    [super viewWillLayoutSubviews]; 
    SKView *skView = (SKView*)self.originalContentView; 
    if (!skView.scene) { 
     SKScene *scene = [GameScene sceneWithSize:skView.bounds.size]; 

     [skView presentScene:scene]; 
     //skView.showsPhysics = YES; 


    } 

} 

- (BOOL)shouldAutorotate 
{ 
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     return UIInterfaceOrientationMaskPortrait; 
    } else { 
     return UIInterfaceOrientationMaskAll; 
    } 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 
+0

любой ?????????? – Todd

ответ

0

Я понял это. Ответ, как мне показалось, был невероятно простым и довольно ошеломляющим, что Apple не поместила в документацию какое-то предупреждение, но опять же, может быть, я просто слишком много нуба, и мы должны знать такие вещи.

Ответ, заключается в том, что init никогда не вызывался в GameViewController, вместо этого вызывался initWithCoder:. Когда-то я NSLogged метод init и увидел, что его не звали, я понял это.

Смежные вопросы