我有几天这个问题了,我没有做错什么。
我的应用程序基本上只是创建一些计时器。我需要阻止它们并创建新的。但是目前停止它们是行不通的。
self.timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target:self, selector: "timerDidEnd:", userInfo: "Notification fired", repeats: false)
那是我的计时器
func timerDidEnd(timer:NSTimer){
createUnrepeatedAlarmWithUpdateInterval()
}
因为我的计时器不想停止,所以我目前正在使用未重复的计时器,并在计时器停止后自行启动。
func stopAlarm() {
if self.timer != nil {
self.timer!.invalidate()
}
self.timer = nil
self.timer = NSTimer()
}
这就是我停止计时器的方式。
alarmManager.stopAlarm()
alarmManager.createUnrepeatedAlarmWithUpdateInterval()
我stopAlarm()
在创建新计时器之前先调用该函数。
我真的不知道我在做什么错,所以我很感谢每个答案:)
class AlarmManager: ViewController{
private var timer : NSTimer?
private var unrepeatedTimer : NSTimer?
private let notificationManager = NotificationManager()
private var current = NSThread()
private let settingsViewController = SettingsViewController()
func createRepeatedAlarmWithUpdateInterval(){
var timeInterval:NSTimeInterval = settingsViewController.getUpdateIntervalSettings()
if timer == nil{
timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
target: self,
selector: "repeatedTimerDidEnd:",
userInfo: "Notification fired",
repeats: true)
}
}
func repeatedTimerDidEnd(repeatedTimer:NSTimer){
ConnectionManager.sharedInstance.loadTrainings(settingsViewController.getServerSettings())
createUnrepeatedAlarm(10)
}
func createUnrepeatedAlarm(timeInterval:Double){
unrepeatedTimer = NSTimer.scheduledTimerWithTimeInterval(timeInterval,
target: self,
selector: "unrepeatedTimerDidEnd:",
userInfo: "Notification fired",
repeats: false)
}
func unrepeatedTimerDidEnd(unrepeatedTimer:NSTimer){
notificationManager.createNotification(self, reminderType: NotificationManager.ITEMRATINGREMINDER)
notificationManager.createNotification(self, reminderType: NotificationManager.ITEMREMINDER)
print("UnrepeatedAlarm ended")
}
func stopAlarm(){
print("StopAlarm triggered")
if (timer != nil)
{
print("stoptimer executed")
timer!.invalidate()
timer = nil
}
if (unrepeatedTimer != nil)
{
unrepeatedTimer!.invalidate()
unrepeatedTimer = nil
}
}
}
多数民众赞成在整个类的代码。也许有帮助:D
安全启动和停止计时器的常用方法是
var timer : NSTimer?
func startTimer()
{
if timer == nil {
timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target: self, selector: "timerFired", userInfo: nil, repeats: true)
}
}
func stopTimer()
{
if timer != nil {
timer!.invalidate()
timer = nil
}
}
startTimer()
开始只有当它的定时器nil
和stopTimer()
停止它,只有当它不是nil
。
您只需要在创建/启动新计时器之前停止计时器。
在 Swift 3中 替换
NSTimer
与Timer
,NSTimer.scheduledTimerWithTimeInterval(
与 Timer.scheduledTimer(timeInterval:
selector: "timerFired"
与selector: #selector(timerFired)
。下面的函数只是将视图移动到一个新位置。它不显示动画:
问题内容: 我希望iOS11版本能够解决无提示推送问题,该问题已在最新的Beta和GM版本的iOS中出现。 目前,我一直在努力理解为什么我没有收到任何静默的推送消息,这实际上应该唤醒我的应用程序以在后台执行一些所需的任务。 在iOS 10中,我仅使用后台获取功能,并在AppDelegate中实现了“唤醒代码”,如以下代码所示。 在iOS 11中,注册代码仍然可以正常工作,我的后端还向Apple D
问题内容: 我知道这将是超级基础,但是我有这段代码: 标签在公共范围内,因此该功能应该可以访问它,但是当循环运行时,标签仍然为零,没有任何元素。 当我在调试过程中启动时,tempLabels与我期望的一样,包含2个字符串元素。 我敢肯定这是一个非常简单的问题,但是我想我现在还没有解决。 问题答案: 标签从未被初始化。更改 至
问题内容: 好吧,我是Laravel的新手,所以直接进入文档开始。文档中存在大量漏洞,因此需要花费大量精力和精力来填补空白,以便进行Laravel设置。现在我已经设置好了,然后继续快速入门指南中的下一步。我创建了路线 现在它说: 所以我打了起来: 但得到404?我试过了 但仍然是404?我遵循了这封信的快速入门指南中的步骤,我缺少什么? 问题答案: 看来您的Laravel应用可以通过Apache
问题内容: 我想每毫秒更改一次计时器,但是它没有按预期工作。 结果是 计时器以毫秒为单位更改为100(00:100),然后更改为01:00 = 40真实秒 邓肯方法: 结果:456680125.54539第一次打印 问题答案: 正如Martin在评论中所说,计时器的分辨率为50-100毫秒(0.05至0.1秒)。尝试以短于该间隔的时间运行计时器将无法获得可靠的结果。另外,计时器不是实时的。它们取决
我有一个场景,我们在Tinymce中定义了有效和无效元素。以下是这两个值: “无效的_元素”是为了防止输入JavaScript。通过以上设置,Tinymce不会阻止JavaScript,但如果我删除“valid_元素”,它就会开始工作。 我不确定我是否删除了“valid\u元素”,Tinymce将允许所有内容,这就是为什么保留“valid\u元素”。 Tinymce版本:5.6.2 相关问题,但在