Swift Alamofire-致命错误:在打开可选值时意外发现nil-youtube-api:PlaylistItem



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

我在(lldb)所在的底部选项卡上的.arrayOfVideos.append(videoObj).处放置了一个断点。我输入了:"po-videoObj.videoThumbnailUrl",但在.append处有一个断点。它返回了url。但是,当我将断点放在videoObj.videoThumbnailUrl上并输入:"po-videoObj.videoThumbnailUrl"时,它返回了空引号"我正在尝试使用snippet方法从youtubev3api播放列表接收数据。正在提取具有键方法的值的数据。

我从中删除了url。"snippet.thrumbus.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值。

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值,而不是崩溃。

此外,我们有条件地转换为NSArray,并与条件绑定相结合,只有当项实际上是一个数组时,我们才会对其进行循环。

如果在源代码上放置断点,而线程在断点上暂停,则表示断点行尚未执行。

当你的线程在上暂停时

videoObj.videoThumbnailUrl=video.valueForKeyPath("snippet.thrumbus.maxres.url")为!字符串

然后按CCD_ 5。这会将你的线程移动到下面的1行。

您应该能够看到videoObj.videoThumbnailUrl 的赋值

相关内容

  • 没有找到相关文章