Swift Alamofire - fatal error : unexpectedly found nil while unwrapping an Optional value - youtube api: PlaylistItems: list

标签 swift youtube-api fatal-error alamofire

这是我的代码:断点在。 videoObj.videoThumbnailUrl =

我设置了一个断点。 arrayOfVideos.append(videoObj)。在放置 (lldb) 的底部选项卡上。我输入:“po videoObj.videoThumbnailUrl”,同时在 .append 处有一个断点。 它返回了 url。但是当我将断点放在 videoObj.videoThumbnailUrl 上时。并输入:“po videoObj.videoThumbnailUrl”它返回空引号“” 我正在尝试使用代码段方法从 youtubev3api-playlist 接收数据。使用 value for key 方法提取数据。

我从中删除了 url。 “snippet.thumbnails.maxres”并尝试运行它,但出现此错误:无法将类型“__NSCFDictionary”(0x105c4eef0)的值转换为“NSString”(0x10603fb20)。

for video in JSON["items"] as! NSArray {

 let videoObj = Video()

 videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as! String

 videoObj.videoTitle = video.valueForKeyPath("snippet.title") as! String

 videoObj.videoDescription = video.valueForKeyPath("snippet.description") as! String

 videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as! String

                arrayOfVideos.append(videoObj)
            }

最佳答案

不要使用强制转换或强制解包,因为如果它们遇到 nil 值,它们会导致您的应用程序崩溃。就像你的情况一样。而是使用 optional bindingsoptional chaining检测和处理 nil 值。

if let items = JSON["items"] as? NSArray {
    for video in items {
        let videoObj = Video()            
        videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as? String            
        videoObj.videoTitle = video.valueForKeyPath("snippet.title") as? String            
        videoObj.videoDescription = video.valueForKeyPath("snippet.description") as? String            
        videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as? String            
        arrayOfVideos.append(videoObj)
    }
}

请注意,此代码不再使用强制转换,因此如果 Youtube API 不发送某些字段,那么我们将简单地使用 nil这些值,而不是崩溃。

还有我们conditionally castNSArray 并结合条件绑定(bind),我们只在项目实际上是一个数组时才对其进行循环。

关于Swift Alamofire - fatal error : unexpectedly found nil while unwrapping an Optional value - youtube api: PlaylistItems: list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34508963/

相关文章:

ios - 使用唯一键快速合并字典

ios - 在具有容器 View 的 VC 中,prepareForSegue 在 ViewDidload 之前被调用

ios - 无法从字符串中删除可选的 Word?

ios - UITableViewCell 中的 YTPlayerView

ios - 如何使用iOS-GTLYouTube库播放YouTube视频?

ios - 在我的应用程序关闭后保存变量(快速)

youtube - 页面 token youtube api v3

swift - SceneKit—— fatal error : unexpectedly found nil while unwrapping an Optional value when getting child node

java - Android Studio 相机使用 Activity 未找到

php - 简单的 HTML Dom - 使用 load_file 时出现 fatal error