【问题标题】:'NSInvalidArgumentException', reason: '-[MenuScene distance]: when replacing a scene'NSInvalidArgumentException',原因:'-[MenuScene 距离]:替换场景时
【发布时间】:2013-10-07 20:32:25
【问题描述】:

在我的代码中,我制作了一个 GameManager 单例,它有一个负责改变场景的方法。我调用的第一个场景是 MenuScene,然后我将其替换为 GameScene。当我这样做时,控制台输出显示:

2013-10-07 19:40:55.895 MyGame[56164:a0b] -[MenuScene distance]: unrecognized selector sent to instance 0xb460690
2013-10-07 19:40:56.011 MyGame[56164:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MenuScene distance]: unrecognized selector sent to instance 0xb460690'

从日志中,我不明白为什么我得到-[MenuScene distance] ...,因为距离是 GameScene 的属性而不是 MenuScene。

下面是GameManager切换场景的方法:

-(void)runSceneWithID:(SceneTypes)sceneID {
SceneTypes oldScene = currentScene;
currentScene = sceneID;
//NSString* str;
id sceneToRun = nil;
switch (sceneID)
{
    case kBeginScene:
        sceneToRun = [BeginScene node];
         break;
    case kGameScene:
        sceneToRun = [GameScene node];
        break;

    case kMenuScene:
        sceneToRun = [MenuScene node];
        break;

    default:
        CCLOG(@"Unknown ID, cannot switch scenes");
        return;
        break;
}

if (sceneToRun == nil) {
    // Revert back, since no new scene was found
    currentScene = oldScene;
    return;
}


if ([[CCDirector sharedDirector] runningScene] == nil) {
    [[CCDirector sharedDirector] runWithScene:sceneToRun];

} else {

    [[CCDirector sharedDirector] replaceScene:sceneToRun];
}

}

另外,替换场景的调用是在一个图层类中,它是菜单场景的一部分。见下文:

-(void)startGameScene {
[[GameManager sharedGameManager] runSceneWithID:kGameScene];

}

请帮忙。

【问题讨论】:

    标签: cocos2d-iphone singleton layer sigabrt


    【解决方案1】:

    您收到此消息是因为 distance 消息已发送到没有此选择器的 MenuScene 实例(GameScene 显然有)。

    因此,可能在您管理单例的场景中的某个地方出现问题,而您仍然(或已经)拥有一个 MenuScene 实例,而您希望在该实例中拥有一个 GameScene 实例。

    在 Xcode 中添加 exception breakpoint 以查看消息的确切来源。

    PS:在像单例这样的全局实例中管理场景时要非常小心。如果您在全局实例/变量中保持对场景(或任何节点)的强引用,则很容易泄漏内存。确保每个场景都有使用日志实现的 dealloc 方法,以查看它是否确实解除分配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多