NewsfeedsTableViewController

NewsfeedsTableViewController

我有一个相当奇怪的失败失败案例,我无法理解。

我在两个UITableViewController中有几乎相同的代码。 ProjectTableViewController显示Project的列表,其数据源为[Project]NewsfeedsTableViewController显示Newsfeed的列表,但是Newsfeed可以包含不同类型的源数据,包括Project

根据源数据的类型,将NewsfeedsTableViewController的每个单元向下转换为UITableViewCell的适当子类。

ProjectTableViewCell UITableViewCell的子类,在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
    }
}


我很想了解导致此问题的原因。

最佳答案

通过向ProjectTableViewCell添加另一个NewsfeedsTableViewController原型单元格并使用它以Newsfeed作为源显示Project来解决此问题。

这意味着我将必须为所有源数据类型添加原型单元,然后在情节提要上对其进行配置。我不希望那样做。

我以为我可以通过这一切来回避,但我想Swift不能那样工作。

关于ios - Swift:奇怪的向下失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35869459/

10-09 10:00