Xcode 对MM:SS:HS使用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

我在Xcode 4.2中创建了一个NSTimer,它可以工作,但我遇到了这个问题

这是我在模拟器中的项目

当我按开始时,它开始,当我按停止时,它停止,当它停止时,它将重置 但当它启动时,我按下重置键,当它运行时,什么也没有发生,启动时不重置,基本上你必须停止,然后重置是方法,或者我需要添加代码,这里有我的代码副本

#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];
}