SpriteKit视图抛出NSInvalidArgumentException [英] SpriteKit view throwing 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
上调用任何内容时,它崩溃了这条消息:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UIView setShowsDrawCount:]:无法识别的选择器发送到实例0x9685030'
我认为这是因为它没有将实例视为SKView而是作为一个UIView。
提前致谢。
一些额外的:
Sprite工具包使用此代码加载场景。
/ /配置视图。
SKView * skView =(SKView *)self.view;
skView.showsFPS = NO;
skView.showsNodeCount = NO;
//创建和配置场景。
self.scene = [SKMyScene sceneWithSize:skView.bounds.size];
self.scene.scaleMode = SKSceneScaleModeAspectFill;
//呈现场景。
[skView presentScene:self.scene];
并且没有错误。这些课程完全相同。只是进入视图搞砸了吗?
Joe
self.view
是一个 UIView
对象。简单地转换指针不会使它成为不同类型的对象。
SKView * spriteView =(SKView *)self.view;
spriteView
现在指向对象, self.view
指向编译器,它实际指向 SKView
类型的对象。这就是为什么你没有得到任何编译器错误或警告。在运行时,您发送的消息无法由 spriteView
处理,因为它仍然只是一个 UIView
对象。 / p>
I have this code below that loads a scene in the viewDidLoad:
method.
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];
When I call anything on the spriteView
, it crashes with this message:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setShowsDrawCount:]: unrecognized selector sent to instance 0x9685030'
I assume this is because it is not treating the instance as a SKView and instead as a UIView.
Thanks in advance.
Some extra:
Sprite kit uses this code to load a scene.
// 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];
And, with no error. The classes are the exact same. Would just coming into the view screw this up?
Joe
self.view
is a UIView
object. Simply casting the pointer does not make it a different type of object.
SKView *spriteView = (SKView *) self.view;
spriteView
is now pointing to the object, that self.view
is pointing to, telling the compiler, that it actually points to an object of type SKView
. That's why you don't get any compiler errors or warnings. At runtime you are sending messages that can't be handled by spriteView
because it is still just a UIView
object.
这篇关于SpriteKit视图抛出NSInvalidArgumentException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!