2016-10-09 160 views
-1

我只是從YouTube API獲取數據並在tableView上顯示它。在Swift 3升級之前它工作正常,但現在它給了我一個錯誤。未捕獲的異常'NSUnknownKeyException'

我能夠成功打印JSON,但不能顯示標題,說明和imageView。

當我點擊videoTableView,我得到一個從「videoObj」開始的錯誤。

錯誤消息:

這個類是「不密鑰值用於鍵片段兼容編碼-。

let videoObj = Video() 
videoObj.videoId = Video.value(forKeyPath: "snippet.resourceId.videoId") as! String 
videoObj.videoTitle = Video.value(forKeyPath: "snippet.title") as! String 
videoObj.videoDescription = Video.value(forKeyPath: "snippet.description") as! String 
videoObj.videoThumbnailUrl = Video.value(forKeyPath: "snippet.thumbnails.maxres.url") as! String 

arrayOfVideos.append(videoObj) 

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

我看過類似的問題,其中一些建議,以檢查故事板丟失連接或類的名稱,但不能複製他們在我自己的項目。

一些人還建議清理項目,從模擬器和設備中刪除應用程序,並擺脫派生的數據,但沒有一個似乎是我的解決方案。

在Swift 3升級之前,行如下;

let videoObj = Video() 
videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as! String 
+0

什麼是'Video'?該錯誤表明它沒有名爲'snippet'的屬性。 – rmaddy

+0

爲什麼Swift 3代碼調用'... = Video.value ...'而舊的Swift代碼調用'... = video.value ...'?請注意'視頻'與'視頻'。 – rmaddy

+1

@matt這與故事板或其他問題無關。這是一個實際的KVC問題。 – rmaddy

回答

0

如果你有Video,把(video as NSDictionary)

因此,例如:

videoObj.videoId = (video as NSDictionary).value(forKeyPath: "snippet.resourceId.videoId") as! String 

...等等。

+0

謝謝, @matt。根據你的建議,我能夠擺脫這個問題。但是這一次,它進入了一個不同的部分,我創建了一個datatask並傳遞了請求(如!(Data ?, URLResponse?,Error?) - > Void)),並帶有不同的錯誤消息「(lldb)」。再次感謝。 –

相關問題