仅在编译设备时变量“未声明”

时间:2011-05-25 05:15:56

标签: iphone objective-c ios compilation device

我收到错误'currentUpdateMethod'未声明(首次使用此功能)。此引用的变量currentUpdateMethod是头文件中声明的SEL类型的实例变量。因为构建到模拟器并运行应用程序按预期工作,我相信我已正确设置所有内容。这个错误只出现在今天 - 我已经在设备上测试了几天而没有问题。我确实试图清理和清理所有目标。我甚至在xcode中将变量名称输入到文件中,它为我自动填充变量。什么可能导致设备编译在这些变量上失败而不是模拟器的编译?

编辑:代码如下。

超类:

#import "Deployable.h"

@interface Drawable : Deployable {

float currentDelta;

SEL currentUpdateMethod;
SEL currentAnimationMethod;
SEL currentBatchMethod;

float rotation;
}

- (id) init;

- (id) initWithActivationTime:(float)time;

- (int) updateWithDelta:(float)delta;

- (int) animate;

- (int) batch;

@end

然后是问题类:

#import "Drawable.h"
#import "Structures.h" //contains Vector2f declaration

@interface Player : Drawable {

    Image *playerGraphic;

    Vector2f position;

}

@property (nonatomic) Vector2f position;

- (id) initWithImage:(Image *)aGraphic andPosition:(Vector2f)aPosition;

- (void) setupInactiveState;
- (int) updateInactiveState;
- (int) animateInactiveState;
- (int) batchInactiveState;

- (void) setupActiveState;
- (int) updateActiveState;
- (int) animateActiveState;
- (int) batchActiveState;

@end

它的实现,抛出错误:

#import "Player.h"
#import "AIEngine.h"

@implementation Player

@synthesize position;

- (id) initWithImage:(Image *)aGraphic andPosition:(Vector2f)aPosition {

    self = [super init];

    if(self) {

        playerGraphic = [aGraphic retain];
        position = aPosition;


    }

    return self;
}

- (int) deployWithScene:(MainScene *)newScene {

    [super deployWithScene:newScene];

    [self setupInactiveState];

    return 1;
}

- (void) setupInactiveState {

    currentUpdateMethod = @selector(updateInactiveState); //'currentUpdateMethod' undeclared (first use in this function)
    currentAnimationMethod = @selector(animateInactiveState); //'currentAnimateMethod' undeclared (first use in this function)
    currentBatchMethod = @selector(batchInactiveState); //'currentAnimateMethod' undeclared (first use in this function)

}

- (void) setupActiveState {    

    currentUpdateMethod = @selector(updateActiveState); //'currentUpdateMethod' undeclared (first use in this function)
    currentAnimationMethod = @selector(animateActiveState); //'currentAnimateMethod' undeclared (first use in this function)
    currentBatchMethod = @selector(batchActiveState); //'currentBatchMethod' undeclared (first use in this function)

}

@end

重申一下,在为设备构建时,这六个错误仅抛出 。当我为模拟器构建时,应用程序构建并正常运行。

Edit2:我只切换到LLVM并且没有抛出错误。我想找出问题的根源,而不是仅仅使用其他编译器。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我很确定这是Xcode中的一个错误,因为我可以看到你的代码没有任何问题。

我会尝试这两件事:

1)为了快速解决问题,您可以尝试合成变量,然后替换

currentUpdateMethod = @selector(updateInactiveState);

[self setCurrentUpdateMethod:@selector(updateInactiveState)];

2)从项目中删除文件。从头开始重新创建类。将旧代码复制到新文件中。

看起来这个人有类似的问题:Strange error regarding instance variables & superclass

请告诉我这些建议是否有帮助。如果他们这样做,我会请你将错误提交给Xcode开发人员:)

答案 1 :(得分:2)

我有几周的同样问题

"Variable Undeclared" error when compiling to iOS Device, but not for Simulator

我发现的一个解决方案是简单地将编译器从默认的LLVM GCC 4.2更改为LLVM Compiler 2.0(或更改为“Apple LLVM编译器2.1”)。它似乎是编译器中的一个错误,但它只是一个猜测。

如果根本不需要使用GCC编译器,更改它可以快速解决您的问题。