2017-07-30 3 views
0

Ich verwende die YouTube-Daten-API und Alamofire, um die Videos meines YouTube-Kanals anzuzeigen und dynamisch zu aktualisieren. Hier ist mein Code:Fehler bei der Verwendung der YouTube-Daten-API und 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() 
       } 
      } 
     } 
    } 
} 

Ich erhalte einen Fehler

Gewinde 1: EXC_BAD_INSTRUCTION

auf der Linie for video in dictionary["items"] as! NSArray {. In der Konsole sehe ich

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

Die Daten werden in einem UITableView angezeigt. Irgendwelche Ideen, wie das zu beheben ist?

Antwort

0

Das bedeutet, dass Sie für Elemente in Ihrem Wörterbuch keinen Wert haben oder dass Sie nicht ordnungsgemäß darauf zugreifen.

0

Sie versuchen, NSArray zu zwingen. Dies stürzt Ihre App ab, wenn dictionary["items"] kein NSArray ist.
Ich empfehle Ihnen, einen Haltepunkt vor der Schleife zu setzen, um den Typ Ihres dictionary["items"] zu überprüfen.

Beispiel:

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

Bitte keine Gewalt Typumwandlung verwenden. Dies kann zum Absturz Ihrer App führen. Immer benutzen wenn lassen oder Wache lassen. Versuchen Sie es zu wiederholen, wie der

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

Ich erhalte einen Fehler 'Type Int keinen Index members' auf den Leitungen hat' wenn lassen videoId = video [ "id"], wie? String {',' wenn Snippet = Video ["Snippet"] als? [String: Any] {', und' wenn thumbnails = video ["thumbnails"] als? [String: Any] {' –

+0

Bitte sehen Sie meine bearbeitete Antwort. Obwohl es zu spät ist. –

Verwandte Themen