我有一个“本地声明隐藏实例变量”错误,“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;
}
}
答案 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;你看到的错误。
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