2016-05-08 4 views
-1

私は曲を再生する基本的な音楽アプリを作っています。手動で曲をスクラブするまではうまくいきますが、NStimerを追加して曲を再生して自動的にスクラブすると、アプリがクラッシュします。ヘルプは高く評価されます!AVAudioplayerオーディオプレーヤーがUisliderのクラッシュを起こしている

  
    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

に役立ちますか? – user3353890

答えて

0

いくつかのこと:なぜあなたはpause()方法でplayerを再定義していますか?あなたはすでにviewDidLoad()でそれをしました。ちなみに、viewDidLoad()の中に関数定義がありますので、それもチェックしてください。

一方、私はtryを使っている方法に関連する別の問題があると思います。代わりに:

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 
     } 

あなたが全体のdo - try - catch構造を使用したくない場合は、キーワードtry!を使用しての可能性を持って、

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) 
    } 

ようにそれを使用する必要がありますか。次に、あなたのコードは次のようになります。

 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) 

希望これは、このクラッシュが発生したときにどのようなエラーあなたが得るん

関連する問題