尝试添加在其他类中声明的节点时出现运行时错误

时间:2015-03-28 14:58:42

标签: ios objective-c sprite-kit

我尝试做的是自定义节点类,但在init中它还创建了自己的单个节点(声明为@properties,因此您可以在任何地方访问它们。这些节点也是我在这里找到的自定义类Correct way to create button in Sprite Kit?)。如果我在我的GameScene.m中尝试[self addChild:]这些单独的节点,它将崩溃,从而产生运行时错误。添加一个异常断点告诉我问题出在我在下面显示的行中,但我不明白为什么。错误是"尝试使用名称(null)"将nil节点添加到父SKScene,尽管我给该节点命名。请把我推向正确的方向。我是iOS开发的绝对初学者,并试图查找我想要实现的目标,但没有运气。

源代码:

DirectionalPad.h

#import "DirectionalButton.h"

@interface DirectionalPad : SKSpriteNode

@property(nonatomic)DirectionalButton *dirBtnLeft;
@property(nonatomic)DirectionalButton *dirBtnRight;

@end

DirectionalPad.m

    -(void)addButtons
    {
        //Executed in init method
        NSString *pathToImageForLeftButtonTexture = @"buttonDirectionalLeft";
        NSString *pathToImageForRightButtonTexture = @"buttonDirectionalRight";
        self.dirBtnLeft = [[DirectionalButton alloc]initWithImageNamedNormal:pathToImageForLeftButtonTexture selected:pathToImageForLeftButtonTexture];
/*Setting size, position, name, zPosition*/
        self.dirBtnRight = [[DirectionalButton alloc]initWithImageNamedNormal:pathToImageForRightButtonTexture selected:pathToImageForRightButtonTexture];
/*Same here*/
    }

GameScene.m

#import "DirectionalButton.h"
#import "DirectionalPad.h"

@implementation GameScene
{
    DirectionalPad *pad;
}

//Some code omitted...

- (void)createHUD {
    //Executed in didMoveToView:

    pad = [[DirectionalPad alloc] init];
/*PROBLEMATIC LINE*/
        [self addChild:pad.dirBtnLeft];
/*END*/
    [self addChild:pad.dirBtnRight];
    [self addChild:pad];
}

1 个答案:

答案 0 :(得分:0)

您没有显示DirectionalPad类的init方法。 init方法是否显式创建了新的DirectionalButton对象(使用alloc和new)?如果没有,则创建一个pad对象,其dirBtnLeft和dirBtnRight属性在创建pad后都将具有值nil。因此

[self addChild:pad.dirBtnRight];

将等同于

[self addChild:nil];

这显然不是你想做的。这正是运行时错误消息告诉您的内容。在这种情况下,消息的名称(null)部分无关紧要。