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
指向的对象,告诉编译器它实际上指向了SKView
types的对象。 这就是为什么你没有得到任何编译器错误或警告。 在运行时,你发送的消息不能被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工具包后,它应该与苹果提供的默认代码一起工作