Cocos2d iphone 对于';没有可见的@界面;类别';声明选择器';选择器';

Cocos2d iphone 对于';没有可见的@界面;类别';声明选择器';选择器';,cocos2d-iphone,Cocos2d Iphone,我遵循“学习Cocos2D”,在第4章中,我遇到了以下指令: 在GameLayer init方法中,在scheduleUpdate之后添加对initSpiders方法的调用,下面讨论: -(id) init { if ((self=[super init])) { ... [self scheduleUpdate]; [self initSpiders]; } return self; } I get和ARC错误消息:“GameLayer”没有可见的@i

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

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

-(id) init {
if ((self=[super init])) {
...
       [self scheduleUpdate];
       [self initSpiders];
   }
   return self;
}
I get和ARC错误消息:“GameLayer”没有可见的@interface声明选择器“initspider”

我在电话里得到了同样的信息:自我重置


我错过了什么?在这一点上,一切都构建并运行得很好。

这个问题源于这样一个事实,即
initspider
resetspider
没有在类接口中声明,而是在
.m
文件中在使用它们的点之后定义的

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

  • initspider
    resetspider
    方法的定义移动到
    init
    方法上方,错误将消失

  • 在类的
    @接口
    中为这两个方法添加声明

  • (如果你同时做这两件事,它也会起作用)


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

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

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

    在游戏场景
    init
    方法中,在
    scheduleUpdate:

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

    清单4-8。为了便于访问,蜘蛛精灵被初始化并添加到CCArray中

    -(void)initspider
    { 
    CGSize screenSize=[[CCDirector sharedDirector]winSize];
    //使用临时蜘蛛精灵是获取图像大小的最简单方法
    CCSprite*tempSpider=[CCSprite spriteWithFile:@“spider.png”];
    float imageWidth=[tempSpider纹理].contentSize.width;
    //在整个屏幕宽度上,尽可能多地使用彼此相邻的蜘蛛网。
    int numSpiders=screenSize.width/imageWidth;
    //使用alloc初始化spider数组。
    spider=[[CCArray alloc]initWithCapacity:numSpiders];
    对于(int i=0;i
    您编写了
    initspider
    resetspider
    的方法了吗?“下一步讨论”一行表示您将要编写这些方法。如果使用XCode 4.3+这将不是问题。由于这个原因,此警告不再显示。@sergio-我已经按照书中的指示包含了.h文件声明:@brentg:是否可能您试图过早编译?我的意思是,您是否已经在书中找到了
    initspider
    resetspider
    实现,并将它们粘贴到您的源文件中?很有趣。我复制了一个用于定义init方法的粘贴代码,并替换了我的代码。我用NSMutableArray更改了您的[[CCArray alloc]initWithCapacity:numSpiders],正如它在.h文件中声明的那样。[self-initSpiders]的错误消息消失,但[self-resetSpiders]调用的错误仍然存在。这不是我的代码。。这是本书下一部分的引文。(第二版)
    -(id) init  { 
        if ((self = [super init])) 
        { 
            … 96  CHAPTER 4:  Your First Game 
            [self scheduleUpdate]; 
            [self initSpiders]; 
        } 
        return self;  
    }   
    
    -(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]; 
    }