2017-02-13 50 views
0

我有两个不同的ViewControllers,细节&搜索。去细节的赛段工作正常,但去搜索一直不断崩溃的应用程序。我已经花了两个小时阅读类似的问题,但没有人似乎有同样的问题:Xcode Segue“无法投射类型的值”

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    let detailVC = segue.destination as! DetailViewController 

    if segue.identifier == "newDocSegue" { 
     // Create a new document and pass it to the detail view. 
     detailVC.doc = Document() 
     detailVC.isAddAction = true 
    } 

    if segue.identifier == "editDocSegue" { 
     // Load the existing document into the detail view, for editing. 
     let indexPath = tableView.indexPath(for: sender as! UITableViewCell)! 
     detailVC.doc = Document[indexPath.row] 
     detailVC.isAddAction = false 
    } 
    else if segue.identifier == "searchSegue" { 
     shouldPerformSegue(withIdentifier: "searchSegue", sender: Any?.self) 
    } 

} 
+0

segues从TableViewController到ViewControllers –

+2

shouldPerformSegue(withIdentifier:“searchSegue”,sender:Any?.self),为什么这行代码在那里? – raki

+0

您在第二个if语句中缺少'else' – Fonix

回答

0

你的问题是

让detailVC = segue.destination作为! DetailViewController

line。这将尝试将任何VC(包括您的搜索VC)作为DetailViewController进行投射。试试这个:

let detailVC : UIViewController 

if segue.identifier == "newDocSegue" { 
    // Create a new document and pass it to the detail view. 
    detailVC = segue.destination as! DetailViewController 
    detailVC.doc = Document() 
    detailVC.isAddAction = true 
} 

if segue.identifier == "editDocSegue" { 
    // Load the existing document into the detail view, for editing. 
    detailVC = segue.destination as! ??? // not sure what type you want here 
    let indexPath = tableView.indexPath(for: sender as! UITableViewCell)! 
    detailVC.doc = Document[indexPath.row] 
    detailVC.isAddAction = false 
} 
else if segue.identifier == "searchSegue" { 
    detailVC = segue.destination as! SearchViewController 
    shouldPerformSegue(withIdentifier: "searchSegue", sender: Any?.self) 
} 
+0

谢谢。这回答了它。我在前两个赛段中移动了let语句。 –

0

你的问题是:

let detailVC = segue.destination as! DetailViewController 

如果你的目的地的类型是SearchViewController投会导致错误

试试这个:

if let detailVC = segue.destination as? DetailViewController 

你应该知道约as?as!

+0

这是有道理的。谢谢。 –

相关问题