Обнаружено ноль при развертывании необязательного значения (Библиотека музыки)

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 ответа

Поставьте чек на счет, используя if состояние. Вы получаете доступ к индексу, который может быть nil, При обращении к нему произойдет ошибка во время выполнения.

Предпочитаемый подход будет явно заключен в ?

Вы получаете доступ к элементу без проверки его размера. Таким образом, songList[0] выходит за пределы, следовательно, происходит сбой.

Если ваш медиа-запрос не возвращает элементов, то localSongs а также songlist оба будут массивами размера 0, Когда вы затем пытаетесь сослаться на песню с songList[0] вы будете получать доступ к индексу 0 в пустом массиве. Отсюда крушение.

Это больше похоже на проблему с ожиданием, что на симуляторе будет музыка. Поскольку это не так, songList.count == 0, что означает, что songList[0] должен генерировать исключение. Похоже, ожидаемое и желаемое поведение для меня.

Другие вопросы по тегам