我想將值(MP3文件從文檔目錄)添加到NSMutableArray
。我正在創建一個音樂播放器,所以當一首歌曲完成時,我的方法應該通過AVAudioPlayer Delegate
播放下一首歌曲。我寫了一個if
聲明並檢查當前曲目是否大於array.count
它應該播放第一首歌,其索引是0
。NSMutableArray的索引不是以0開始
的問題是應用程序崩潰,因爲這個錯誤的:fatal error: Array index out of range
然後打印我的陣列和一些奇怪的事情發生在這裏:
print("all files are :\(player.MP3DirectoryFiles.count)")
print("all files :\(player.MP3DirectoryFiles.description)")
所有文件:2
所有文件:(「Cake By The Ocean.mp3」,「LoveSong.mp3」)
它似乎計數是可以的!有2
文件,但問題是陣列的索引開始0
所以在這種情況下,player.MP3DirectoryFiles.count
應該是:1
這意味着:0,1
。 [IN TABLE VIEW]
我不得不說在桌面視圖中一切正常,選擇單元格和播放歌曲,但音樂完成後發生。 我需要一些幫助,在這裏解決這個問題是更多的代碼,如果有幫助:
EDITED 2:
func playMusic(at:Int) {
let musicFile = MP3DirectoryFiles[at] as! NSString
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let musicURL = documentsDirectory.appendingPathComponent(musicFile.lastPathComponent)
getDataFromTrack(file: musicURL)
do {
player = try AVAudioPlayer(contentsOf: musicURL)
player.prepareToPlay()
player.delegate = self
appDefaults.setTrack(duration: Float(player.duration))
} catch let error as NSError {
print(error.description)
}
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
NotificationCenter.default.post(name: NSNotification.Name("musicIsFinished"), object: nil)
}
另一個視圖控制器:
func musicIsFinished(notification:Notification) {
_trackRow = appDefaults.loadTrackNumber()
if _trackRow > player.MP3DirectoryFiles.count {
_trackRow = 0
} else {
_trackRow! += 1
}
player.playMusic(at: _trackRow!)
prepareToPlay()
}
「'player.MP3DirectoryFiles.count'應該是:1表示:0,1」,實際上count應該是2,因爲數組包含2個對象。 –
@JamesP那麼索引數量呢? –
你可能想'如果currentTrack == array.count-1 {//是最後一首歌曲}' –