Xcode 对MM:SS:HS使用NSTimer?
我在Xcode 4.2中创建了一个NSTimer,它可以工作,但我遇到了这个问题 这是我在模拟器中的项目 当我按开始时,它开始,当我按停止时,它停止,当它停止时,它将重置 但当它启动时,我按下重置键,当它运行时,什么也没有发生,启动时不重置,基本上你必须停止,然后重置是方法,或者我需要添加代码,这里有我的代码副本Xcode 对MM:SS:HS使用NSTimer?,xcode,ios5,xcode4.2,nstimer,nstimeinterval,Xcode,Ios5,Xcode4.2,Nstimer,Nstimeinterval,我在Xcode 4.2中创建了一个NSTimer,它可以工作,但我遇到了这个问题 这是我在模拟器中的项目 当我按开始时,它开始,当我按停止时,它停止,当它停止时,它将重置 但当它启动时,我按下重置键,当它运行时,什么也没有发生,启动时不重置,基本上你必须停止,然后重置是方法,或者我需要添加代码,这里有我的代码副本 #import <UIKit/UIKit.h> @interface FirstViewController : UIViewController { IBO
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController {
IBOutlet UILabel *time;
NSTimer *myticker;
//declare baseDate
NSDate* baseDate;
}
-(IBAction)stop;
-(IBAction)reset;
@end
我真的很感激。谢谢。首先,由于
start
方法中未保留baseDate
,因此上述内容在到达showActivity
时应会因EXC\u BAD\u访问而崩溃[NSDate date]
返回一个自动删除的对象,因此baseDate
在start
方法之后将有一个无效的引用
我建议将baseDate
更改为retain
属性,然后使用self在start
中设置它
//.h
@property (nonatomic, retain) NSDate *baseDate;
//.m
@synthesize baseDate;
-(IBAction)start {
[myticker invalidate];
self.baseDate = [NSDate date];
myticker = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
}
要解决reset
问题,请注意showActivity
方法采用baseDate
的当前值来计算经过的时间,然后设置time
标签以显示其格式
在start
方法中,将baseDate
设置为当前时间(不设置time.text
),然后启动计时器。然后,showActivity
方法将继续触发并设置time.text
在reset
方法中,您希望计时器开始显示自按下reset后经过的时间。计时器已在运行,因此无需重新启动。设置time
标签文本不起作用,因为当已经运行的计时器再次启动时,它将计算从baseDate
开始的运行时间,该时间仍然是原始开始时间,然后根据该时间设置time.text
。因此,不要设置time.text
,而是设置baseDate
:
-(IBAction)reset {
self.baseDate = [NSDate date];
}
伙计们,我真的需要你们的帮助看看showActivity方法是如何显示经过的时间的(理解这段代码是关键)。然后看看start方法与reset方法的区别。@Annakarena我已经尝试了一天,但仍然找不到方法,你能帮我吗?你能帮我一个大忙并用你的答案编辑我的答案吗?我真的不明白你的意思(请将此代码添加到我的代码中,谢谢)。你需要做四件事:1)在iAction行正上方的.h中添加@property
行。2) 在@implementation
行之后的.m中添加@synthesis
行。3) 更改start方法中的代码,如图所示。4) 更改重置方法中的代码,如图所示。hi现在可以工作,但现在停止时不会重置??非常感谢您理解了代码,只需考虑一下您希望发生什么,然后尝试一下。-(iAction)reset{self.baseDate=[NSDate date];}还是应该是这样
-(IBAction)reset {
self.baseDate = [NSDate date];
}