SpriteKit视图抛出NSInvalidArgumentException

时间:2013-11-29 01:58:25

标签: ios objective-c sprite-kit

我在下面的代码中加载了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];

并且没有错误。这些课程完全相同。只是进入视图会搞砸了吗?

7 个答案:

答案 0 :(得分:7)

如果您正在关注apple的walk-thougrh,则跳过该部分:“打开项目的故事板。它有一个视图控制器(SpriteViewController)。选择视图控制器的视图对象并将其类更改为SKView。

答案 1 :(得分:1)

self.viewUIView个对象。简单地投射指针并不会使它成为不同类型的对象。

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

spriteView现在指向self.view指向的对象,告诉编译器它实际上指向类型为SKView的对象。这就是为什么你没有得到任何编译器错误或警告。在运行时,您正在发送spriteView无法处理的消息,因为它仍然只是UIView对象。

答案 2 :(得分:1)

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

干杯, 杰西

答案 3 :(得分:1)

你需要做的是从UIView更改视图的子类到该视图下的SKView选择你的viewcontroller并更改它的子类

答案 4 :(得分:0)

@Sebastian不正确。

我猜你跟着苹果的走路了。 也许以下教程会有所帮助:

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

 #import <UIKit/UIKit.h>

#import <SpriteKit/SpriteKit.h>

创建新的视图控制器时,默认情况下不包含Spritekit。添加精灵工具包后,它应该与苹果提供的默认代码

一起使用