本地声明隐藏实例变量/未使用变量警告

时间:2012-11-03 12:44:37

标签: xcode compiler-warnings xcode4.5

我有一个“本地声明隐藏实例变量”错误,“secondsLeft”和“unused variable”表示小时,分钟和秒。提前感谢您提供的任何帮助。

.h文件

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "BT_viewController.h"



@interface BT_screen_blank : BT_viewController {

    NSTimer *timer;
    IBOutlet UILabel *myCounterLabel;
}

@property (nonatomic, retain) UILabel *myCounterLabel;
@property (nonatomic) int secondsLeft;
@property (nonatomic) int minutes;
@property (nonatomic) int hours;
@property (nonatomic) int seconds;

-(void)updateCounter:(NSTimer *)theTimer;
-(void)countdownTimer;

@end

.m文件

 @implementation BT_screen_blank
 @synthesize myCounterLabel;
 @synthesize secondsLeft, hours, minutes, seconds;


 //viewDidLoad
 -(void)viewDidLoad{
[BT_debugger showIt:self:@"viewDidLoad"];
[super viewDidLoad];


int hours, minutes, seconds;
int secondsLeft;


secondsLeft = 16925;
[self countdownTimer];
}

- (void)updateCounter:(NSTimer *)theTimer {
if(secondsLeft > 0 ){
    secondsLeft -- ;
    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    myCounterLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes,          seconds];
}
else{
    secondsLeft = 16925;
}
}

3 个答案:

答案 0 :(得分:1)

你必须用self调用变量。例如:

self.hours = self.secondsLeft / 3600;

如果要声明后面的变量具有相同的名称,请使用其他名称,例如:

int hours_tmp;

答案 1 :(得分:1)

从你的&#34; viewDidLoad&#34;中删除这些内容。功能:

int hours, minutes, seconds;
int secondsLeft;

这两行正是产生&#34; local declaration hides instance variable&#34;你看到的错误。

和edzio说的一样,使用&#34; self.&#34;在您引用的任何属性前面。给他+1!

答案 2 :(得分:0)

&#34;本地声明隐藏实例变量&#34; “secondsLeft”的错误

您在.m文件中重新声明了int secondsLeft;

所以在这一行secondsLeft = 16925;上,编译器将{169}存储在-(void)viewDidLoad方法中的局部变量中,而不是在.h文件中声明的int secondsLeft;

您应该删除重新声明 int hours, minutes, seconds; .m文件中的int secondsLeft;。或者,您可以使用其他变量名称

“未使用的变量”表示小时,分钟和秒。 那么这只是一个警告,强调你永远不要使用int hours, minutes, seconds;方法中声明的这些变量-(void)viewDidLoad