'class'没有可见的@interface声明选择器'selector'

时间:2013-01-08 15:10:31

标签: cocos2d-iphone

我正在关注“学习Cocos2D”,在第4章中,我遇到了以下指令:

在GameLayer init方法中,在scheduleUpdate之后添加对下面讨论的initSpiders方法的调用:

-(id) init {
if ((self=[super init])) {
...
       [self scheduleUpdate];
       [self initSpiders];
   }
   return self;
}

我得到和ARC错误消息:'GameLayer'没有可见的@interface声明选择器'initSpiders'

我在行上收到相同的消息:self resetSpiders

我错过了什么?到目前为止,一切都在建立并运行良好。

2 个答案:

答案 0 :(得分:0)

此问题源于initSpidersresetSpiders未在类接口中声明,并且在.m文件中使用它们之后定义。

如果它们没有完全丢失,您可以通过以下两种方式解决此问题:

  1. initSpidersresetSpiders方法的定义移到init方法之上,错误将消失;

  2. 在班级的@interface中添加两种方法的声明。

  3. (如果你同时使用它们,它也会起作用)

    检查您的代码,看看这些方法的实现是否可用。

答案 1 :(得分:0)

您的错误似乎是您没有按照本书的下一部分。完成下一部分应该允许您编译代码而不会出现这样的警告。

本书该部分的更完整摘录是:

  

在GameScene init方法中,在initSpiders

之后立即添加对下面讨论的scheduleUpdate:方法的调用
-(id) init  { 
    if ((self = [super init])) 
    { 
        … 96  CHAPTER 4:  Your First Game 
        [self scheduleUpdate]; 
        [self initSpiders]; 
    } 
    return self;  
}   
  

之后,GameScene类中添加了相当多的代码,从清单4-8中的initSpiders方法开始,该方法创建了蜘蛛精灵。

     

清单4-8。 为了更容易访问,Spider精灵被初始化并添加到CCArray

-(void) initSpiders 
{ 
    CGSize screenSize = [[CCDirector sharedDirector] winSize]; 
    // using a temporary spider sprite is the easiest way to get the image's size 
    CCSprite* tempSpider = [CCSprite spriteWithFile:@"spider.png"]; 
    float imageWidth = [tempSpider texture].contentSize.width; 
    // Use as many spiders as can fit next to each other over the whole screen width. 
    int numSpiders = screenSize.width / imageWidth; 
    // Initialize the spiders array using alloc. 
    spiders = [[CCArray alloc] initWithCapacity:numSpiders]; 
    for (int i = 0; i < numSpiders; i++) 
    { 
        CCSprite* spider = [CCSprite spriteWithFile:@"spider.png"]; 
        [self addChild:spider z:0 tag:2]; 

        // Also add the spider to the spiders array. 
        [spiders addObject:spider]; 
    } 
    // call the method to reposition all spiders 
    [self resetSpiders]; 
}