iOS Sprite套件中SKScene内的间隙iAd

iOS Sprite套件中SKScene内的间隙iAd,ios,objective-c,ios7,sprite-kit,iad,Ios,Objective C,Ios7,Sprite Kit,Iad,间隙的iAd代码示例使用主ViewController显示全屏间隙广告 然而,我希望能够在我的iOS Sprite Kit游戏中从SKScene触发广告 我可以在主视图控制器(ViewController.m)中轻松地执行此操作,如下所示: 但是,我尝试访问根视图控制器,该控制器在viewDidLoad方法中设置场景: SKView * skView = (SKView *)self.view; SKScene * scene = [SKScene sceneWithSize:skView.bo

间隙的iAd代码示例使用主ViewController显示全屏间隙广告

然而,我希望能够在我的iOS Sprite Kit游戏中从SKScene触发广告

我可以在主视图控制器(
ViewController.m
)中轻松地执行此操作,如下所示:

但是,我尝试访问根视图控制器,该控制器在
viewDidLoad
方法中设置场景:

SKView * skView = (SKView *)self.view;
SKScene * scene = [SKScene sceneWithSize:skView.bounds.size];
[skView presentScene:scene];
SKScene.m
中,我尝试了以下方法:

[self.view.window.rootViewController requestInterstitialAdPresentation];
X代码抛出了这样一个问题:

No visible @interface for 'UIViewController' declares the selector 'requestInterstitialAdPresentation'

这可能很简单,基本上我需要访问创建SKView和SKScene的ViewController对象,以便向该对象发送
requestInterstitutionAladPresentation
消息(并显示广告).

为什么不将实现
requestInterstitalAddressation
的视图控制器实例传递给
SKScene
实例?这样,您就可以直接引用VC,而不必通过窗口,因为窗口似乎很容易出错

如果您打算接受这个建议,而不太了解您的代码库,我会冒险猜测,为场景创建代理接口并在视图控制器中实现它可能是有意义的。界面看起来像:

@protocol AdDelegate
- (BOOL)requestInterstitialAdPresentation;
@end

就理解根视图控制器为什么不实现
requestInterstitalAddPresentation
而言,我认为最好的办法是调试应用程序,看看发生了什么。我怀疑您正在处理一个包装主VC的容器视图控制器,或者您正在呈现的场景显示在另一个窗口中。

为什么不将实现
requestInterstitalAddressation
的视图控制器实例传递给
SKScene
实例?这样,您就可以直接引用VC,而不必通过窗口,因为窗口似乎很容易出错

如果您打算接受这个建议,而不太了解您的代码库,我会冒险猜测,为场景创建代理接口并在视图控制器中实现它可能是有意义的。界面看起来像:

@protocol AdDelegate
- (BOOL)requestInterstitialAdPresentation;
@end

就理解根视图控制器为什么不实现
requestInterstitalAddPresentation
而言,我认为最好的办法是调试应用程序,看看发生了什么。我怀疑您正在处理一个包装主VC的容器视图控制器,或者您正在呈现的场景显示在另一个窗口中。

您可以使用简单的通知与viewController通信。在viewController中:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(requestInterstitialAdPresentation) name:@"showAdd" object:nil];
然后在你的场景中,只要你想展示你的广告,就发布通知。 在您的场景中:

[[NSNotificationCenter defaultCenter] postNotificationName:@"showAdd" object:nil];

希望这有助于

您可以使用简单的通知与viewController通信。在viewController中:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(requestInterstitialAdPresentation) name:@"showAdd" object:nil];
然后在你的场景中,只要你想展示你的广告,就发布通知。 在您的场景中:

[[NSNotificationCenter defaultCenter] postNotificationName:@"showAdd" object:nil];

希望这有帮助

您是否尝试像这样投射视图控制器?[(ViewController*)self.view.window.rootViewController请求InterstitutionAladPresentation];您是否尝试像这样强制转换视图控制器?[(ViewController*)self.view.window.rootViewController请求InterstitutionAladPresentation];这是最简单的方法。