2016-03-08 5 views
0

У меня довольно странный случай неудачи вниз, который я не могу понять.Swift: Незначительное падение вниз

У меня почти идентичный код в двух 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 
    } 
} 

I хотел бы понять, что вызывает эту проблему.

+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

@ViralSavaj благодарит! эти ссылки заставили меня снова взглянуть на раскадровку ... и проблема была там! – Harfangk

ответ

0

Вопрос был решен путем добавления другой прототипа ячейки ProjectTableViewCell к NewsfeedsTableViewController и использования его для отображения Newsfeed с Project в качестве источника.

Это означает, что мне нужно будет добавить ячейки прототипа для всех типов исходных данных, а затем настроить их на раскадровке. Я не собираюсь этого делать.

Я думал, что смогу уклониться от всего этого, но я думаю, что Свифт не работает так.

Смежные вопросы