错误:选择器“addChild”没有已知的类方法

Posted

技术标签:

【中文标题】错误:选择器“addChild”没有已知的类方法【英文标题】:Error: No Known Class method for selector 'addChild' 【发布时间】:2015-01-03 03:31:24 【问题描述】:

所以,我创建了一个名为“Level1Class”的新类,并创建了一个名为“level1Layout”的方法。在该方法中,我创建了一个名为“level1ButtonRed”的 SKSprite,当我设置位置并尝试使用

添加它时
[self addChild: level1ButtonRed]

它给了我错误

"No Known Class method for selector 'addChild'."

#import "Level1Class.h"
#import "GameScene.h"

@implementation Level1Class

+(void) level1Layout

    SKSpriteNode *level1ButtonRed;
    level1ButtonRed = [SKSpriteNode spriteNodeWithImageNamed:@"LevelButton_Red"];
    level1ButtonRed.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    [self addChild: level1ButtonRed];


@end

#import "GameScene.h"

static NSString *levelButtonRed = @"levelButtonRed";

@implementation GameScene

SKSpriteNode *trans;

-(void)didMoveToView:(SKView *)view 
    /* Setup your scene here */

    trans = [SKSpriteNode spriteNodeWithImageNamed:@"Transparent"];
     

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    /* Called when a touch begins */

    for (UITouch *touch in touches) 
        CGPoint location = [touch locationInNode:self];
        trans.position = location;

        [self enumerateChildNodesWithName:@"levelButtonRed" usingBlock: ^(SKNode *node1, BOOL *stop1)
            if( [trans intersectsNode:node1])
                [Level1Class level1Layout];
            
        ];

     

-(void)update:(CFTimeInterval)currentTime 
    /* Called before each frame is rendered */ 

@end

Level1Class.h

#import <SpriteKit/SpriteKit.h>
#import <Foundation/Foundation.h>

@interface Level1Class : NSObject

-(void) level1Layout;

@end

有什么帮助吗??

【问题讨论】:

用导致问题的实际代码更新您的问题。 @rmaddy 所说的,发布代码和来自日志输出编辑的实际错误消息:伙计,我们需要代码......而不是一行 sn-ps。你知道怎么调试吗? Level1Class 的子类是什么?我的猜测是你子类化了错误的类。 @Young_Programmer,如果您在这些论坛上需要帮助,您需要学习如何发布足够的数据以供人们帮助您调试它。假装你正在调试它并发布你需要的数据。 猜测你要么打算将Level1Class 变成SKNode,但你继承自NSObject,或者你有一个SKNode 的实例并打算调用addChild:在那而不是self 【参考方案1】:

您将该消息发送到self 内的+level1Layout。这是一个类方法。因此self 指向类对象。您不能将子对象添加到类对象。您可以将子级添加到该类的实例对象中。

要解决该问题,请先创建一个实例,然后将子级添加到该实例。

【讨论】:

谢谢!这解决了问题!

以上是关于错误:选择器“addChild”没有已知的类方法的主要内容,如果未能解决你的问题,请参考以下文章

错误:选择器“isPedometerEventTrackingAvailable”没有已知的类方法

错误:选择器“setScreenName:screenClass:”没有已知的类方法

选择器 valueWithCGRect 没有已知的类方法

选择器'circleOfButtons:buttonSize:radius:'没有已知的类方法

选择器'application:openURL:options:sourceApplication:annotation'没有已知的类方法

选择器“logInInBackgroundWithReadPermissions:block:”没有已知的类方法