initWithCoder在Xcode 6中没有按预期工作?

时间:2015-01-12 14:19:37

标签: objective-c sprite-kit skspritenode

我正在使用Sprite Kit引擎。我曾经在initWithSize中编写代码,但自更新以来,initWithSize不会自动调用,而是调用viewDidLoad。我知道必须使用initWithSize而不是initWithCoder,所以我更改了代码:

-(id) initWithSize:(CGSize)size {

    if (self = [super initWithSize:size]) {
        self.backgroundColor = [SKColor blueColor];
        SKSpriteNode *paddle = [SKSpriteNode spriteNodeWithImageNamed:@"paddle"];
        paddle.position = CGPointMake(150, 100);
        paddle.physicsBody.dynamic = NO;

        [self addChild:paddle];
    }

    return self;
}

为:

-(instancetype)initWithCoder:(NSCoder *)aDecoder {

    self = [super initWithCoder:aDecoder];

    if (self) {
        self.backgroundColor = [SKColor blueColor];
        SKSpriteNode *paddle = [SKSpriteNode spriteNodeWithImageNamed:@"paddle"];
        paddle.position = CGPointMake(150, 100);
        paddle.physicsBody.dynamic = NO;

        [self addChild:paddle];
    }

    return self;
}

现在,场景的颜色变为蓝色,但我无法向场景添加精灵。在构建时我也没有收到任何错误。

我应该在initWithCoder进行一些更改吗? (如果是,请说明并详细说明)

可以initWithCoder使用与initWithSize中完全相同的代码吗?

PS:下面是我在GameScene.m中的完整代码,我没有任何其他场景。

#import "GameScene.h"

@implementation GameScene

-(void)didMoveToView:(SKView *)view {

/* Setup your scene here */

}

-(instancetype)initWithCoder:(NSCoder *)aDecoder {

    self = [super initWithCoder:aDecoder];

    if (self) {

        SKSpriteNode *paddle = [SKSpriteNode spriteNodeWithImageNamed:@"paddle"];

        paddle.position = CGPointMake(150, 100);

        paddle.physicsBody.dynamic = NO;

        [self addChild:paddle];



    }

    return self;

}

-(void)update:(CFTimeInterval)currentTime {

/* Called before each frame is rendered */

}

@end

我只是将代码从initWithSize复制并粘贴到initWithCoder。它似乎没有创建桨对象。

请帮忙!

1 个答案:

答案 0 :(得分:0)

这可能是方法签名不匹配?

而不是instancetype,它被定义为:arraylist

我只是在查看是否可以在我的键控编码实现中获得实例类型的类型安全性并找到您的问题。

其他人说它有效。值得一试。 Why does initWithCoder not return instancetype?