SpriteKit视图抛出NSInvalidArgumentException

我有下面这个代码在viewDidLoad:方法加载一个场景。

 SKView *spriteView = (SKView *) self.view; spriteView.showsDrawCount = YES; spriteView.showsNodeCount = YES; spriteView.showsFPS = YES; PFPiePlanesScene *scene = [PFPiePlanesScene sceneWithSize:self.view.frame.size]; scene.scaleMode = SKSceneScaleModeAspectFill; [spriteView presentScene:scene]; 

当我在spriteView上调用任何东西时,它会崩溃,并显示以下消息:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setShowsDrawCount:]: unrecognized selector sent to instance 0x9685030' 

我认为这是因为它不是将实例视为SKView,而是将其视为UIView。

提前致谢。

一些额外的:

Sprite工具包使用此代码来加载场景

 // Configure the view. SKView * skView = (SKView *)self.view; skView.showsFPS = NO; skView.showsNodeCount = NO; // Create and configure the scene. self.scene = [SKMyScene sceneWithSize:skView.bounds.size]; self.scene.scaleMode = SKSceneScaleModeAspectFill; // Present the scene. [skView presentScene:self.scene]; 

而且,没有错误。 类是完全一样的。 会进入视图搞砸了吗?

self.view是一个UIView对象。 简单地转换指针不会使它成为不同types的对象。

 SKView *spriteView = (SKView *) self.view; 

spriteView现在指向spriteView指向的对象,告诉编译器它实际上指向了SKViewtypes的对象。 这就是为什么你没有得到任何编译器错误或警告。 在运行时,你发送的消息不能被spriteView处理,因为它仍然只是一个UIView对象。

如果你正在关注苹果的行走,你跳过了这个部分:“打开项目的故事板,它有一个单一的视图控制器(SpriteViewController),select视图控制器的视图对象,并将其类改为SKView。

不要忘记在链接的框架和库下添加SpriteKit.framework。

干杯,杰西

你需要做的是从UIView更改视图的子类到SKViewselect该视图下的视图控制器,并更改它的子类

@塞巴斯蒂安是不正确的。

我想你是跟随苹果的行走。 也许下面的教程将帮助:

http://www.raywenderlich.com/49625/sprite-kit-tutorial-space-shooter

在将您的UIView投射到SKView之前,您必须确保在您的故事板中将您的自定义类设置为SKView。

如果您注意到头文件中第一个视图控制器带有这些导入。

  #import <UIKit/UIKit.h> 

#import <SpriteKit/SpriteKit.h>

当你创build一个新的视图控制器时,默认情况下不包括Spritekit。 添加sprite工具包后,它应该与苹果提供的默认代码一起工作