1
var songList = NSMutableArray()
var player = AVPlayer()
var isSelected = false

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.



    var songs = MPMediaQuery() // also tried var songs = MPMediaQuery.songsQuery()
    var localSongs: NSArray = songs.items
    songList = NSMutableArray(array: localSongs)

    tableView.reloadData()

    var song: MPMediaItem = songList[0] as MPMediaItem // <<- Error here

    var currentItem = AVPlayerItem(URL: song.valueForProperty(MPMediaItemPropertyAssetURL) as NSURL)

    player.replaceCurrentItemWithPlayerItem(currentItem)

    player.play()

    var songTitle: NSString = song.valueForProperty(MPMediaItemPropertyTitle) as NSString

    songName.text = songTitle 

    var time = Float(CMTimeGetSeconds(player.currentItem.duration))
    sliderOutlet.value = time




}

我正在构建一个音乐播放器,但是当我在模拟器中运行时应用程序崩溃并给出此错误:index 0 beyond bounds for empty array,并在我尝试在 iPhone 上运行时说:{

MediaLibrary} Database validation succeeded
fatal error: unexpectedly found nil while unwrapping an Optional value

编辑:似乎它没有访问我 iPhone 上的本地音乐库并将歌曲添加到数组中。

4

4 回答 4

0

使用if条件检查计数。您正在访问的索引可以是nil. 如果访问它将通过运行时错误。

首选方法将其明确包装为?

于 2014-09-18T07:55:29.430 回答
0

似乎更像是期望模拟器中有音乐的问题。既然没有,songList.count == 0,这意味着 songList[0] 应该生成一个异常。对我来说似乎是预期和期望的行为。

于 2014-09-17T20:22:25.607 回答
0

您正在访问一个元素而不测试它的大小。所以 songList[0] 越界,因此崩溃。

于 2014-09-17T19:58:01.627 回答
0

如果您的媒体查询没有返回任何项目,那么localSongssonglist都将是 size 的数组0。然后,当您尝试引用一首歌曲时,songList[0]您将访问0空数组中的索引。因此崩溃。

于 2014-09-17T20:16:15.287 回答