2016-03-18 60 views
0

我遇到问题,请检查UIImage是否为零,以显示UIAlertViewController如何在Swift中使用YouTube Api v3来正确检查UIImage是否为零?

我的应用程序从youtube频道获取播放列表。其中一个播放列表中包含的视频已被YouTube删除,因此在获取播放列表数据时不包含“缩略图”键。

这是我已经执行的代码来检查是否有缩略图图像显示,否则显示警报。

print("playlistVideos_ARRAY = \(self.playlistVideos_ARRAY)") 

print("startOfNextIndexForVideos = \(self.startOfNextIndexForVideos)") 

if let thumbnailImage: UIImage = UIImage(data: NSData(contentsOfURL: NSURL(string: ((((self.playlistVideos_ARRAY[self.startOfNextIndexForVideos] as! Dictionary<NSObject, AnyObject>)["snippet"] as! Dictionary<NSObject, AnyObject>)["thumbnails"] as! Dictionary<NSObject, AnyObject>)["high"] as! Dictionary<NSObject, AnyObject>)["url"] as! String)!)!)! 
{ 
    print("111111111") 
    self.thumbnailOfVideo.append(thumbnailImage) 
} 
else 
{ 
    print("222222222") 

    let message = UIAlertController(title: "Uh Oh!", message: "There is an issue with this playlist :(", preferredStyle: .Alert) 

    let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil) 
         message.addAction(defaultAction) 

    dispatch_async(dispatch_get_main_queue(), { 
          self.presentViewController(message, animated: true, completion: nil) 
         }) 
} 

但是,它从来没有输出222222222。它总是失败的权利,如果检查与以下输出:

playlistVideos_ARRAY = [{ 
    etag = "\"q5k97EMVGxODeKcDgp8gnMu79wM/Jl892aZsvFYpvjE5ENwTItH9cqQ\""; 
    id = PLP2q8Ric9B9X6r8L2LA7xRwg0HNnKL3RLaooSkbmjTxo; 
    kind = "youtube#playlistItem"; 
    snippet =  { 
     channelId = UC5ltMmeC4YFaart1SSXdmAg; 
     channelTitle = "Viet My Television"; 
     description = "This video is private."; 
     playlistId = "PLxnnlv22Xcq34TNdsMxEIKvIHE_phd7XK"; 
     position = 0; 
     publishedAt = "2016-03-16T18:51:39.000Z"; 
     resourceId =   { 
      kind = "youtube#video"; 
      videoId = uPnWMZ1pbSc; 
     }; 
     title = "Private video"; 
    }; 
}] 
startOfNextIndexForVideos = 0 
fatal error: unexpectedly found nil while unwrapping an Optional value 

我在做什么错误检查这方面?谢谢。

编辑: 这里的输出我playlistVideos_ARRAY通过包含与相关视频的缩略图还没有被YouTube删除一个有效的播放列表的GET请求获取:

playlistVideos_ARRAY = [{ 
    etag = "\"q5k97EMVGxODeKcDgp8gnMu79wM/U4OVbnjwS2bbU44Q1Hijy6-koAE\""; 
    id = "PLP2q8Ric9B9VZXfc41HzRjprfOHpOYQd_SbLAuuxZVyw"; 
    kind = "youtube#playlistItem"; 
    snippet =  { 
     channelId = UC5ltMmeC4YFaart1SSXdmAg; 
     channelTitle = "Viet My Television"; 
     description = ""; 
     playlistId = PLxnnlv22Xcq0HpE242iwHh8IP78esU9sF; 
     position = 0; 
     publishedAt = "2016-02-15T23:25:20.000Z"; 
     resourceId =   { 
      kind = "youtube#video"; 
      videoId = mIW5trLZJcM; 
     }; 
     thumbnails =   { 
      default =    { 
       height = 90; 
       url = "https://i.ytimg.com/vi/mIW5trLZJcM/default.jpg"; 
       width = 120; 
      }; 
      high =    { 
       height = 360; 
       url = "https://i.ytimg.com/vi/mIW5trLZJcM/hqdefault.jpg"; 
       width = 480; 
      }; 
      medium =    { 
       height = 180; 
       url = "https://i.ytimg.com/vi/mIW5trLZJcM/mqdefault.jpg"; 
       width = 320; 
      }; 
     }; 
     title = "talkshow chuong trinh hoi cho tet Binh Than o Miles Square Park"; 
    }; 
}] 

回答

0

作为一个经验法则,如果您不知道字典关键字是否存在,首选可选链接。这将防止由于试图强制使用零值解包optionals而导致的崩溃。

如果你的数据对象是嵌套的字典所有斯威夫特类型,这将是简单:

if let url = playListVideos_ARRAY[startOfNextIndexForVideos]["snippet"]?["thumbnails"]?["high"]?["url"] { 
    // attempt to create the image using the successfully obtained url here 
} 

要处理你的情况,我会尝试打破了if let语句转换成逗号分隔的列表,更换所有as!as?,只有创建图像的尝试如果URL关键发现:

if let dict = playListVideos_ARRAY[startOfNextIndexForVideos] as? Dictionary<NSObject, AnyObject>, 
    snippet = dict["snippet"] as? Dictionary<NSObject, AnyObject>, 
    thumbnails = snippet["thumbnails"] as? Dictionary<NSObject, AnyObject>, 
    high = thumbnails["high"] as? Dictionary<NSObject, AnyObject>, 
    url = high["url"] as? Dictionary<NSObject, AnyObject> { 
     // create your image with the url here 
    } else { 
     // do your thing with "2222222.." 
    } 
+0

我已经实现了一个解决方案,但我只是想你的,它的工作是相同的,所以我会标记:) – Pangu

0

是像这样的东西

if([yourarray valueForKey:@"thumbnails"]!=nil){ 
     NSLog("Key is found."); 
    } 
    else{ 
     NSLog("key is not found..playlist not available"); 
    }