我正在尝试将一个对象从我的tableview传递到详细视图。我使用revealviewcontroller框架有一个滑出菜单。因此,我需要从tableview创建一个segue到revealviewcontroller,并从这里创建另一个到最终的detailviewcontroller。
这就是为什么我不能在详细视图中设置对象 - 任何想法如何这样做?
这是使用过的代码:
if segue.identifier == "communityDetailSegue" {
// Get the cell that generated this segue.
if let selectedCommunityCell = sender as ? UITableViewCell {
let destination = segue.destinationViewController as!CommunityViewController
if let communityIndex = self.tableView.indexPathForCell(selectedCommunityCell) {
destination.community = self.communitiesOfCurrentUser[communityIndex.row]
print(self.communitiesOfCurrentUser[communityIndex.row].name)
}
}
}
这是例外。
无法将'SWRevealViewController'类型的值(0x10027b9f0)转换为'CommunityViewController'
答案 0 :(得分:1)
您收到错误是因为segue的目标VC是SWRevealViewController
而不是CommunityViewController
。
解决问题的一种方法是分两步传递值:
首先,在prepareForSegue()
中,您将值传递给SWRevealViewController(您需要此类的子类,例如MyRevealViewController
):
if segue.identifier == "communityDetailSegue" {
// Get the cell that generated this segue.
if let selectedCommunityCell = sender as ? UITableViewCell {
let destination = segue.destinationViewController as! MyRevealViewController
if let communityIndex = self.tableView.indexPathForCell(selectedCommunityCell) {
destination.community = self.communitiesOfCurrentUser[communityIndex.row]
print(self.communitiesOfCurrentUser[communityIndex.row].name)
}
}
}
然后,在MyRevealViewController
中,您可以在设置后立即传递值:
class MyRevealViewController : SWRevealViewController {
// Let's assume this is the outlet to your final VC:
IBOutlet let communityViewController: CommunityViewController!
var community: YourCommunityType {
didSet {
if let communityVC = self.communityViewController {
communityVC.community = self.community
}
}
}
}