1

对于“secondsLeft”和小时、分钟和秒的“未使用变量”,我有一个“本地声明隐藏实例变量”错误。提前感谢您对此提供的任何帮助。

.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;
}
}
4

3 回答 3

1

您必须使用 self 调用变量。例如:

self.hours = self.secondsLeft / 3600;

此外,如果您想稍后声明具有相同名称的变量,请使用其他名称,例如:

int hours_tmp;
于 2012-11-03T12:49:42.767 回答
1

从您的 " viewDidLoad" 函数中删除这些行:

int hours, minutes, seconds;
int secondsLeft;

这两行正是产生local declaration hides instance variable您所看到的“”错误的原因。

就像 edzio 说的,self.在你引用的任何属性前面使用“”。给他+1!

于 2012-11-03T12:53:23.763 回答
0

“secondsLeft”的“局部声明隐藏实例变量”错误</p>

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

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

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

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

于 2012-11-03T12:54:43.607 回答