2016-05-08 8 views
-1

Also mache ich eine grundlegende Musik-App, die ein Lied spielt. Es funktioniert gut, bis ich den Song manuell scrubble, aber wenn ich den NStimer hinzufüge, um es automatisch mit dem Lied zu schrubben, stürzt die APP ab! Hilfe wird geschätzt!AVaudioplayer Audio-Player progess wie Uislider abstürzt

  
    var player:AVAudioPlayer = AVAudioPlayer() 


    @IBAction func play(sender: AnyObject) { 

     player.play() 
    } 


    @IBOutlet var volumeSlider: UISlider! 

    @IBAction func adjustVolume(sender: AnyObject) { 

     player.volume = volumeSlider.value 
    } 

    @IBOutlet var scrub: UISlider! 


    @IBAction func adjustScrub(sender: AnyObject) { 

     player.currentTime = NSTimeInterval(scrub.value) 
    } 

    @IBAction func pause(sender: AnyObject) { 

     player.pause() 
    } 


    @IBAction func stop(sender: AnyObject) { 

     player.pause() 
     do { 

      try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!)) 


     }catch{ 

      //didnt work 
     } 



    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     do { 

    try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!)) 

      var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true) 

      scrub.maximumValue = Float(player.duration) 

     }catch{ 

      //didnt work 
     } 

     func updateSlider() { 
      scrub.value = Float(player.currentTime) 

     } 


    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

    }  
} 
+0

Welche Fehler Sie erhalten, wenn dieser Absturz auftritt? – user3353890

Antwort

0

Nur wenige Dinge: Warum sind Sie neu zu definieren player im pause() Methode? Das hast du schon in viewDidLoad() gemacht. Und nebenbei, Sie haben eine Funktionsdefinition in viewDidLoad(), überprüfen Sie das auch.

Auf der anderen Seite, ich denke, Sie können ein anderes Problem im Zusammenhang mit der Art, wie Sie versuchen verwenden. Statt:

do { 

      try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!)) 

      var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true) 

      scrub.maximumValue = Float(player.duration) 

     }catch{ 

      //didnt work 
     } 

haben Sie es zu benutzen wie

do { 
     player = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!)) 

     var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true) 

     scrub.maximumValue = Float(player.duration) 

    } catch let error as NSError { 

     print(error) 
    } 

Oder, wenn Sie die ganze do - try - catch Struktur nicht verwenden möchten, haben Sie die Möglichkeit try! das Schlüsselwort zu verwenden. Dann wird Ihr Code wie folgt aussehen:

 player = try! AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!)) 

     var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true) 

     scrub.maximumValue = Float(player.duration) 

this helps