我有一个相当奇怪的失败失败案例,我无法理解。
我在两个UITableViewController
中有几乎相同的代码。 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
}
}
我很想了解导致此问题的原因。
最佳答案
通过向ProjectTableViewCell
添加另一个NewsfeedsTableViewController
原型单元格并使用它以Newsfeed
作为源显示Project
来解决此问题。
这意味着我将必须为所有源数据类型添加原型单元,然后在情节提要上对其进行配置。我不希望那样做。
我以为我可以通过这一切来回避,但我想Swift不能那样工作。
关于ios - Swift:奇怪的向下失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35869459/