Iphone 开始按钮启动NSTimer,停止按钮停止它,开始按钮再次启动它。但是';使无效';给我一个错误吗?

Iphone 开始按钮启动NSTimer,停止按钮停止它,开始按钮再次启动它。但是';使无效';给我一个错误吗?,iphone,objective-c,cocoa-touch,nstimer,Iphone,Objective C,Cocoa Touch,Nstimer,我有一个启动按钮,它启动一个计时器,在.h文件中声明。然后,我有一个停止按钮,它不会使计时器失效然后,当我用开始按钮再次启动计时器时,它会由于无效而导致错误 有什么办法解决这个问题吗?在这一点上非常具体: 一旦失效,计时器对象就不能重用 所以,只需创建一个新的计时器。如果您仅在用户按下按钮时执行此操作,则不会影响您的性能。NSTimer类使用起来有点笨拙;它不是将创建/销毁与开始/停止分开,而是将它们放在一起。换句话说,计时器一创建就启动,一销毁就停止 因此,您需要使用NSTimer对象的存在作

我有一个启动按钮,它启动一个计时器,在.h文件中声明。然后,我有一个停止按钮,它不会使计时器失效然后,当我用开始按钮再次启动计时器时,它会由于无效而导致错误

有什么办法解决这个问题吗?

在这一点上非常具体:
一旦失效,计时器对象就不能重用


所以,只需创建一个新的计时器。如果您仅在用户按下按钮时执行此操作,则不会影响您的性能。

NSTimer类使用起来有点笨拙;它不是将创建/销毁与开始/停止分开,而是将它们放在一起。换句话说,计时器一创建就启动,一销毁就停止

因此,您需要使用NSTimer对象的存在作为标志,以指示它是否正在运行;大概是这样的:

//私有方法

@接口MyClass() { NSTimer*\u定时器; } -(无效)_timerFired; @结束

@MyClass的实现

  • (iAction)startTimer:(id)发送方 { 如果(_timer==nil) { _计时器=[NSTimer scheduledTimerWithTimeInterval:1.0f 目标:自我 选择器:@selector(_timerFired) 用户信息:无 重复:是]保留]; } }

  • (iAction)停止计时器:(id)发送方 { 如果(_timer!=nil) { [定时器失效]; _定时器=零; } }

  • (无效)_timer已点火 { NSLog(@“ping”); }


张贴一个您正在使用的代码示例。@Nikita Rybak有正确的答案。你可能会得到一个更详细的答案,@Andrew,如果你发布你的代码。检查标签[xcode]:stackoverflow.com/tags/xcode/infor的用法问题是当我有一个初始化它的方法和另一个使它无效的方法时,如果我用另一个方法初始化它,则无效方法无法识别它。我必须在.h中初始化它,它才能识别NSTimer。@Andrew 1)也许您可以启用一个
BOOL
变量来存储计时器是否处于活动状态,并在action方法中检查它。2) 或者,您可以为
NSTimer
创建一个简单的包装器。它可以有
stop
resume
方法,并在其中保留计时器创建参数,以便以后在
resume
中使用。我完全同意
NSTimer
可以提供更多的功能,特别是来自java的功能。@Andrew一般来说,发布一些代码可能会有所帮助,因为我无法描述您的确切情况。