【发布时间】:2016-03-08 14:02:51
【问题描述】:
我有一个非常奇怪的失败案例,我无法理解。
我在两个UITableViewControllers 中有几乎相同的代码。 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
}
}
我很想了解导致此问题的原因。
【问题讨论】:
-
@ViralSavaj 谢谢!这些链接让我再次查看故事板......问题就在那里!