我已经实施了一个倒计时器,如果用户没有选择任何选项,它会自动启动我的应用程序。当计时器达到零时,我将其无效并触发performSegueWithIdentifier
,这会使我看到我想要的视图。
那时一切都很好......好吧,有点儿。我确实注意到我的视图发射了两次,但之后就好了。此时,如果我离开那个视图,然后再返回,我的segue会一直闪烁,视图会一遍又一遍地加载,直到我停止我的应用程序。
我的输出窗口显示:
2015-05-13 21:20:26.880 Web App Browser [43407:7957566]不平衡 调用开始/结束外观转换 。 2015年5月13日 21:20:28.825 Web App Browser [43407:7957566]不平衡呼叫 开始/结束外观过渡。
这是我的视图控制器:
class StartViewController: UIViewController {
var countDown = Bool()
var timer = NSTimer()
var count = 5
@IBOutlet weak var countdownLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
countDown = AppDelegate().userDefaults.valueForKey("Auto Start") as! Bool
if countDown == true {
var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
} else {
countdownLabel.text = ""
}
}
func update() {
countdownLabel.text = "\(count)"
if count == 0 {
timer.invalidate()
self.performSegueWithIdentifier("toWeb", sender: nil)
} else {
count--
}
}
}
我的故事板:
在下图中,您会看到我选择的segue,它将用户从开始屏幕带入具有嵌入式viewController的导航控制器。您注意到我已将我的标识符添加为"到#34;。
什么会导致我的segue无限循环?
答案 0 :(得分:1)
不确定这是否与您的问题直接相关,但您是在本地一次声明计时器两次,而在类范围内声明一次。
var countDown = Bool()
var timer = NSTimer()
var count = 5
@IBOutlet weak var countdownLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
countDown = AppDelegate().userDefaults.valueForKey("Auto Start") as! Bool
if countDown == true {
var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
} else {
countdownLabel.text = ""
}
}
你看到var timer = NSTimer()在类范围
创建一个计时器var timer = NSTimer.scheduleTimerWithTimeInterval ...在viewDidLoad范围内创建一个新计时器。我认为应该只是timer = NSTimer.scheduleTimer ...
答案 1 :(得分:0)
我想这很明显,但我的更新每秒都会被调用...因为我告诉它。我把performSegueWithIdentifier
放在里面。所以,轻松修复。
var segueFlag = false
func update() {
countdownLabel.text = "\(count)"
if count == 0 {
timer.invalidate()
if segueFlag == false {
self.performSegueWithIdentifier("toWeb", sender: nil)
segueFlag = true
}
} else {
count--
}
}