2013-01-08 30 views
2

我在下面的“学习的Cocos2D”和第4章中,我遇到了以下指令:为“类”无可见@interface声明选择“选择”

而在GameLayer init方法,加在调用initSpiders方法接下来讨论,scheduleUpdate之后:

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

我得到和ARC错误消息:“GameLayer”不可见的@interface声明选择“initSpiders”

我得到了同样的信息在线:self resetSpiderrs

我在想什么?一切都建立起来并且运行良好。

+0

你写过的'initSpiders'和'resetSpiders'但这些方法? “下一步讨论”这一行意味着你即将写出这些方法。 –

回答

0

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

如果他们没有完全丢失,您可以在任何的2种方式解决这个问题:

  1. 移动的initSpidersresetSpiders以上方法你init方法和错误会消失的定义;

  2. 在该类的@interface中为这两种方法添加声明。

(如果两者都做,它也将工作)

检查你的代码,看看是否对这些方法的实施是可用的。

+0

如果使用XCode 4.3+,这不会是问题。此警告不再显示该原因。 –

+0

@sergio - 我已经在书中包含了.h文件声明: – brentg

+0

@brentg:您是否有可能试图编译得太早?我的意思是,你是否已经在书中找到了'initSpiders'和'resetSpiders'实现并将它们粘贴到你的源文件中? – sergio

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中的方法创建了蜘蛛图。

代码4-8。为了方便查找,蜘蛛精灵被初始化并添加到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]; 
} 
+0

有趣。我复制了一个粘贴你的代码来定义init方法,并取代我的。我用.h文件中声明的NSMutableArray更改了[[CCArray alloc] initWithCapacity:numSpiders]。错误消息为[self initSpiders]消失,但错误仍然存​​在[self resetSpiders]调用。 – brentg

+0

这不是我的代码..这是本书的下一个部分的引用。 (第二版) –

相关问题