2015-12-29 30 views
1

這是我的代碼:斷點在。 videoObj.videoThumbnailUrl =Swift Alamofire - 致命錯誤:意外地發現零,同時展開一個可選值 - youtube api:PlaylistItems:列表

我放置了一個突破點。 arrayOfVideos.append(videoObj)。在放置(lldb)的底部選項卡上。我輸入了:「po videoObj.videoThumbnailUrl」,同時在.append處有一箇中斷點。 它與URL返回。但是當我放置videoObj.videoThumbnailUrl的突破點。並輸入:「po videoObj.videoThumbnailUrl」它返回空引號「」 我想從使用片段方法的youtubev3api播放列表中接收數據。使用key方法的值提取數據。

我從中刪除了網址。 「snippet.thumbnails.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) 
      } 

回答

0

分配的值,不要使用強制類型轉換或強制解開,因爲這些會導致應用程序,如果他們遇到零值崩潰。就像你的情況一樣。請使用optional bindingsoptional chaining來檢測並處理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值的,而不是崩潰。

而且我們conditionally castNSArray並結合條件綁定,我們只對項目進行循環,如果它們實際上是一個數組。

+0

我取代了「!」用「?」並得到了一個不同的錯誤。可選類型字符串的值不解開:... – Junior

+0

這是一個業餘的錯誤。我用默認/中/高代替了maxres,它運行正常。沒有錯誤。 :)這是我的第一個項目,請原諒我的錯誤。多謝你們! – Junior

+0

@pjunior - 是否有任何答案幫助你?如果是,請將其標記爲已接受。 – Cristik

0

如果你把一個斷點到源代碼和線程暫停在斷點,這意味着breakpointed線尚未執行。

當你的線程暫停在

videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as! String

然後按step over。這會將您的線1移動到下方。

,你應該能夠看到的videoObj.videoThumbnailUrl

+0

好吧,我認爲這可能是一個問題的標誌。仍然得到錯誤。致命錯誤:在解包可選值時意外發現nil。當我運行項目 – Junior

相關問題