2016-03-08 62 views
0

我有一個比較奇怪的向下轉換失敗的例子,我無法理解。Swift:奇怪的向下轉換失敗

我在兩個UITableViewController s有幾乎相同的代碼。 ProjectTableViewController顯示Project的列表,其數據源是[Project]NewsfeedsTableViewController顯示Newsfeed的列表,但Newsfeed可以包含不同類型的源數據,包括Project

根據源數據的類型,NewsfeedsTableViewController的每個單元都被降級到適當的子類UITableViewCell

ProjectTableViewCellUITableViewCell的一個子類,用於ProjectTableViewControllerNewsfeedsTableViewController

現在,有趣的是,代碼工作沒有問題ProjectTableViewController但崩潰在NewsfeedsTableViewController,給予以下錯誤信息:

Could not cast value of type 'UITableViewCell' (0x102e68128) to 'sample_app.ProjectTableViewCell' (0x1010ce6d0). 

我有以下每類代碼:

ProjectTableViewController.swift 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let project = projects[indexPath.row] 
    let cell = tableView.dequeueReusableCellWithIdentifier("ProjectTableViewCell") as! ProjectTableViewCell 

    cell.projectTitle.text = project.title 
    cell.projectKeywords.text = project.keywords 

    return cell 
} 


NewsfeedsTableViewController.swift 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let newsfeed = self.newsfeeds[indexPath.row] 
    switch newsfeed.newsfeedableType { 
    case "Project": 
     let cell = tableView.dequeueReusableCellWithIdentifier("NewsfeedTableViewCell") as! ProjectTableViewCell 
     let source = newsfeed.newsfeedable as! Project 
     cell.projectTitle.text = source.title 
     cell.projectKeywords.text = source.keywords 
     return cell 

    default: 
     let cell = tableView.dequeueReusableCellWithIdentifier("NewsfeedTableViewCell")! 
     cell.textLabel!.text = newsfeed.newsfeedableType + String(newsfeed.id) 
     return cell 
    } 
} 

我很想知道是什麼導致了這個問題。

+0

http://stackoverflow.com/questions/30429269/cast-value-of-type-uitableviewcell-to-custom-cell或http://stackoverflow.com/questions/29812168/could-not-cast-value -of-type-uitableviewcell-to-appname-customcellname會幫你位 –

+0

@VirusSavaj謝謝!這些鏈接讓我再次查看故事板......並且問題出現在那裏! – Harfangk

回答

0

問題通過加入ProjectTableViewCell另一原型小區到NewsfeedsTableViewController,並使用它,以顯示與Newsfeed作爲Project源解決。

這意味着我必須爲所有源數據類型添加原型單元格,然後在故事板上配置它們。我不期待這樣做。

我以爲我可以通過這一切鴨式,但我猜Swift不這樣工作。