2017-07-30 24 views
0

私はYouTube Data APIとAlamofireを使用して自分のYouTubeチャンネルの動画を表示し、動的に更新しています。ここに私のコードは次のとおりです。YouTube Data APIとAlamofireを使用したときのエラー

func getFeedVideo() {   

Alamofire.request("https://www.googleapis.com/youtube/v3/playlists", parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in 

     if let JSON = response.result.value { 

      if let dictionary = JSON as? [String: Any] { 

       var arrayOfVideos = [Video]() 

       for video in dictionary["items"] as! NSArray { 
        // Create video objects off of the JSON response 
        let videoObj = Video() 
        videoObj.videoID = (video as AnyObject).value(forKeyPath: "snippet.resourceId.videoId") as! String 
        videoObj.videoTitle = (video as AnyObject).value(forKeyPath: "snippet.title") as! String 
        videoObj.videoDescription = (video as AnyObject).value(forKeyPath: "snippet.description") as! String 
        videoObj.videoThumbnailUrl = (video as AnyObject).value(forKeyPath: "snippet.thumbnails.maxres.url") as! String 

        arrayOfVideos.append(videoObj) 

       } 
       self.videoArray = arrayOfVideos 
       if self.delegate != nil { 
        self.delegate!.dataReady() 
       } 
      } 
     } 
    } 
} 

私はエラー

スレッド1取得しています:ラインfor video in dictionary["items"] as! NSArray {上EXC_BAD_INSTRUCTION

を。コンソールで、私は参照してください

fatal error: unexpectedly found nil while unwrapping an Optional value 
(lldb) 

データはUITableViewで表示されています。どのようにこれを修正するための任意のアイデア?

答えて

0

これは、辞書の項目の値がないか、不適切にアクセスしていることを意味します。

0

NSArrayに強制的にキャストしようとしています。 dictionary["items"]がNSArrayでない場合、これによりアプリがクラッシュします。
ループの前にブレークポイントを入れて、dictionary["items"]のタイプを確認することをお勧めします。

例:

guard let items = dictionary["items"] as? NSArray else { return } 
1

力型キャストを使用しないでください。アプリがクラッシュする可能性があります。 letまたはguardを使用する場合は常に使用してください。その

if let dictionary = JSON as? [String: Any] { 
var arrayOfVideos = [Video]() 
if let playlist = dictionary["items"] as? [Any] { 

    for i in 0..<playlist.count { 

     let videoObj = Video() 
     if let video = playlist[i] as? [String: Any] { 
      if let videoId = video["id"] as? String { 
       videoObj.videoID = videoId 
      } 

      if let snippet = video["snippet"] as? [String: Any] { 
       if let videoTitle = snippet["title"] as? String { 
        videoObj.videoTitle = videoTitle 
       } 

       if let videoDescription = snippet["description"] as? String { 
        videoObj.videoDescription = videoDescription 
       } 
      } 

      if let thumbnails = video["thumbnails"] as? [String: Any]{ 
       if let maxres = thumbnails["maxres"] as? [String: Any] { 
        if let url = maxres["url"] as? String { 
         videoObj.videoThumbnailUrl = url 
        } 
       } 
      } 
      arrayOfVideos.append(videoObj) 
     } 
    } 
} 

}

+0

は私が取得していますエラーのように、それを繰り返すようにしてください 'タイプのIntがラインには添字members'を持っていない'場合はVIDEOID =ビデオ[「ID」を]としましょうか?文字列{'、'もしsnippet = video ["snippet"]を? [文字列:任意] {'、および'もしサムネイル=ビデオ["サムネイル"]を? [文字列:Any] {' –

+0

私の編集した答えをご覧ください。あまりにも遅いですが。 –

関連する問題