我使用nstimer创建倒数计时器60秒。在每一秒我都在调用一种更新按钮文本的方法。这件事情很好。但是一旦我离开视图控制器并转到其他视图并返回到同一视图,该方法每次都被称为连续,并且按钮文本的更改也不起作用,也不会调用其中的api调用。这就像它调用每个方法和所有方法,但它在视图控制器中没有改变
self.countDown = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.countDown forMode:NSDefaultRunLoopMode];
答案 0 :(得分:0)
docs说:
编辑:
您可以使用<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
</head>
<body>
<center>Welcome ${person.username}</center>
<form:input name="username"value="${person.password}" /><br>
<input type="text" value="${person.username}" disabled="true"/>
<center>Your password is ${person.password}</center>
<input type="text" value="${person.password}" />
<input type="text" value="${person.story}" />
</body>
</html>
而不是currentRunLoop
将其添加到主线程的运行循环中,而不是将计时器添加到[NSRunLoop mainRunLoop]
,即
[NSRunLoop currentRunLoop]
要从主线程中使其无效,您可以使用
self.countDown = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.countDown forMode:NSDefaultRunLoopMode];
答案 1 :(得分:0)
您是否有理由手动将计时器添加到NSRunLoop?这通常没有必要。使用scheduledTimerWithTimeInterval
代替timerWithTimeInterval
来创建计时器,如下所示:
self.countDown = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats:YES];
这将启动计时器,而无需手动将其添加到NSRunLoop。然后你应该能够用以下方法阻止它:
[self.countDown invalidate];