我有一個比較奇怪的向下轉換失敗的例子,我無法理解。Swift:奇怪的向下轉換失敗
我在兩個UITableViewController
s有幾乎相同的代碼。 ProjectTableViewController
顯示Project
的列表,其數據源是[Project]
。 NewsfeedsTableViewController
顯示Newsfeed
的列表,但Newsfeed
可以包含不同類型的源數據,包括Project
。
根據源數據的類型,NewsfeedsTableViewController
的每個單元都被降級到適當的子類UITableViewCell
。
ProjectTableViewCell
UITableViewCell
的一個子類,用於ProjectTableViewController
和NewsfeedsTableViewController
。
現在,有趣的是,代碼工作沒有問題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
}
}
我很想知道是什麼導致了這個問題。
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會幫你位 –
@VirusSavaj謝謝!這些鏈接讓我再次查看故事板......並且問題出現在那裏! – Harfangk