2016-04-26 74 views
0

我嘗試了很多方法,我發現在其他問題和任何他們正在工作。我的問題是,計時器沒有要求選擇NSTimer timerWithTimeInterval不調用選擇器(Swift)

class MyViewController: UIViewController{ 
    var progressBarTimer = NSTimer() 
    @IBOutlet weak var progress_bar: UIProgressView! 

    override func viewDidLoad() { 
     self.progress_bar.progress = 0 
     self.progressBarTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(MyViewController.updateProgress(_:)), userInfo: nil, repeats: true) 
     //also tried and redefining the updateProgress without timer parameter: 
     /* 
     *self.progressBarTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(MyViewController.updateProgress), userInfo: nil, repeats: true) 
     */ 
    } 
    func updateProgress(timer:NSTimer!) { 
     progress_bar.progress += 0.1 
     if (progress_bar.progress >= 1) { 
      progressBarTimer.invalidate() 
     } 

    } 
} 

我試圖做

progressBarTimer.fire() 

,它只是一次執行的UpdateProgress功能。

任何人都可以點亮?我真的很感激

+1

我試過你的代碼,它工作正常,它每秒調用updateProgress方法。 – Yuvrajsinh

+0

那麼,爲什麼不爲我工作?可能是我在此之前在其他ViewController中調用了其他NSTimer? – JMDelafuente

+0

您是否嘗試過評論updateProgress方法中的所有代碼並只寫print()語句? – Yuvrajsinh

回答

0

答覆我自己,我已經找到了問題。在之前的ViewController中,我在做一個http連接之後執行一個segue。爲了使它的工作,我已經嵌入派遣內部performSegue:

dispatch_async(dispatch_get_main_queue(), { 
    self.performSegueWithIdentifier("goMySecondController", sender: nil) 
}) 

在這第二個控制器,我有一個不工作的定時器。但是,此更改正常工作後。

感謝您的回覆!

0

你可以叫你的函數是這樣的:

let postes = ["1","2","3"] 
    let timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "playProgressBar:", userInfo: postes, repeats: true) 

和功能必須是這樣的:

func playProgressBar(timerSender : NSTimer) { 

    //Do Somethings 

} 
+0

仍然沒有調用選擇器。正如我對@Yuvrajsinh所說的那樣,我在前一個ViewController中創建了另一個NSTimer,但我無效 – JMDelafuente