Обнаружено ноль при развертывании необязательного значения (Библиотека музыки)
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] должен генерировать исключение. Похоже, ожидаемое и желаемое поведение для меня.