这是我的代码:断点在.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
的赋值