在 API 调用 Spotify 后,意外地解开一个可选值以找到一个 nil
Unexpectedly unwrapping an optional to find a nil after an API call to Spotify
所以我知道这可能有点具体,但我一直盯着我的代码看,无法解决这个问题。基本上,我正在通过网络调用 spotify 以获得某个播放列表并传递一个数字,该数字将最终决定我返回的歌曲数量。代码基本如下:
// A network call is made just above to return somePlaylist
let playlist = somePlaylist as! SPTPartialPlaylist
var songs: [SPTPartialTrack] = []
// load in playlist to receive back songs
SPTPlaylistSnapshot.playlistWithURI(playlist.uri, session: someSession) { (error: NSError!, data: AnyObject!) in
// cast the data into a correct format
let playlistViewer = data as! SPTPlaylistSnapshot
let playlist = playlistViewer.firstTrackPage
// get the songs
for _ in 1...numberOfSongs {
let random = Int(arc4random_uniform(UInt32(playlist.items.count)))
songs.append(playlist.items[random] as! SPTPartialTrack)
}
}
问题出在初始化随机的代码部分。在调用此函数的 20 次调用中,我大概有 1 次出于某种原因为 playlist.items.count 解包了一个 nil 值,但似乎无法弄清楚原因。可能是我不了解 API 电话或其他我没有看到但我似乎无法理解的东西。
有人对解决此问题或如何调试此问题有任何建议吗?
好的,在沉睡并继续努力之后,我似乎已经解决了这个问题。这是我在代码中实现的错误处理。
if let actualPlaylist = playlist, actualItems = actualPlaylist.items {
if actualItems.count == 0 {
SongScraper.playlistHasSongs = false
print("Empty playlist, loading another playlist")
return
}
for _ in 1...numberOfSongs {
let random = Int(arc4random_uniform(UInt32(actualItems.count)))
songs.append(actualPlaylist.items[random] as! SPTPartialTrack)
}
completionHandler(songs: songs)
}
else {
print("Returned a nil playlist, loading another playlist")
SongScraper.playlistHasSongs = false
return
}
所以我知道这可能有点具体,但我一直盯着我的代码看,无法解决这个问题。基本上,我正在通过网络调用 spotify 以获得某个播放列表并传递一个数字,该数字将最终决定我返回的歌曲数量。代码基本如下:
// A network call is made just above to return somePlaylist
let playlist = somePlaylist as! SPTPartialPlaylist
var songs: [SPTPartialTrack] = []
// load in playlist to receive back songs
SPTPlaylistSnapshot.playlistWithURI(playlist.uri, session: someSession) { (error: NSError!, data: AnyObject!) in
// cast the data into a correct format
let playlistViewer = data as! SPTPlaylistSnapshot
let playlist = playlistViewer.firstTrackPage
// get the songs
for _ in 1...numberOfSongs {
let random = Int(arc4random_uniform(UInt32(playlist.items.count)))
songs.append(playlist.items[random] as! SPTPartialTrack)
}
}
问题出在初始化随机的代码部分。在调用此函数的 20 次调用中,我大概有 1 次出于某种原因为 playlist.items.count 解包了一个 nil 值,但似乎无法弄清楚原因。可能是我不了解 API 电话或其他我没有看到但我似乎无法理解的东西。
有人对解决此问题或如何调试此问题有任何建议吗?
好的,在沉睡并继续努力之后,我似乎已经解决了这个问题。这是我在代码中实现的错误处理。
if let actualPlaylist = playlist, actualItems = actualPlaylist.items {
if actualItems.count == 0 {
SongScraper.playlistHasSongs = false
print("Empty playlist, loading another playlist")
return
}
for _ in 1...numberOfSongs {
let random = Int(arc4random_uniform(UInt32(actualItems.count)))
songs.append(actualPlaylist.items[random] as! SPTPartialTrack)
}
completionHandler(songs: songs)
}
else {
print("Returned a nil playlist, loading another playlist")
SongScraper.playlistHasSongs = false
return
}