I'm receiving the error 'currentUpdateMethod' undeclared (first use in this function). The variable this refers to, currentUpdateMethod, is an instance variable of type SEL declared in the heade开发者_C百科r file. Because building to the simulator and running the app works as expected, I believe I have everything set up correctly. This error only appeared today - I have been testing on the device for several days now without issue. I did attempt to clean and clean all targets. I even type out the variable name into the file in xcode and it autocompletes the variable for me. What could cause the device compile to fail on these variables but not the compile for simulator?
Edit: Code follows.
Superclass:
#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
Then the problem class:
#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
And its implementation, where the errors are thrown:
#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
Just to reiterate, those six errors are only thrown when building for device. When I build for simulator, the app builds and runs normally.
Edit2: I switched to LLVM only and the errors were not thrown. I'd like to figure out the source of the problem instead of just using the other compiler. Any ideas?
I am pretty certain that this is a bug in Xcode, as there is nothing wrong with your code that I can see.
I would try these two things:
1) For a quick fix, you could try synthesizing your variables and then replacing
currentUpdateMethod = @selector(updateInactiveState);
with
[self setCurrentUpdateMethod:@selector(updateInactiveState)];
2) Remove the files from your project. Create the class again from scratch. Copy the old code into the new file.
Looks like this guy had a similar problem: Strange error regarding instance variables & superclass
Let me know if these suggestions help. If they do, I would kindly ask you to submit the bug to the Xcode devs :)
I am having the same issue for weeks
"Variable Undeclared" error when compiling to iOS Device, but not for Simulator
One solution I found is to simply change the compiler from the default LLVM GCC 4.2
to LLVM Compiler 2.0
(or to `Apple LLVM Compiler 2.1). It seems to be a bug in the compiler, but it is just a guess.
Changing it is a quick fix for your problem if there is no need for you to use the GCC compiler at all.
精彩评论